RT-Thread 4.x STM32F107
官方文档很坑,新旧不分开,文档缺失/分类很乱
有些文档在IDE RT-STUDIO文档里,有些在RTThread标准版文档里,逆天
坑:不支持STM32CUBEMX的Advanced工程,记得重新保存生成basic工程才能用。不能使用.c/.h分离。
坑:适配CUBEMX工程的脚本要自己写
driver/stm32f1xx_hal_conf_bak.h
不一定会生成或替换。
cubemx/下的
- Src/main.c: main()建议使用编译器的__WEAK宏修饰
- Inc/main.h: 注释掉
void Error_Handler(void);
的声明
写好cubemx的rtt导入脚本,命名并放置为 <工程工作目录>/cubemx/SConscript
import os
from building import *
cwd = GetCurrentDir()
src = Glob('Src/*.c')
# add cubemx drivers
src = Split('''
Src/stm32f1xx_hal_msp.c
Src/main.c
''')
path = [cwd]
path += [cwd + '/Inc']
group = DefineGroup('cubemx', src, depend = [''], CPPPATH = path)
Return('group')
SPI总线驱动/IDE文档里的:
基于 RT-Thread Studio 的 SPI 驱动开发文档
SPI从设备驱动/RTT标准版文档里的:
坑,官方文档里 挂载从设备那篇不见了....
挂载 SPI 设备
SPI代码片段
绝大部分开关都在 board.h 里面,请按照官方说明或者头文件里的注释打开 宏声明 以开启功能
初始化SPI从设备
设备注册函数-挂载从设备DEV_DEVNAME到总线DEV_SPIBUS上(rtthread 4.x)
#define DEV_SPIBUS "spi2"
#define DEV_DEVNAME "spi20"//代表spi2下面的第0个设备
static int rt_hw_spi_yourdev_init()
{
rt_err_t err;
spi_dev = (struct rt_spi_device *) rt_malloc(sizeof(struct rt_spi_device));
if (RT_NULL == spi_dev_)
{
rt_kprintf("Failed to malloc the spi device.");
return -RT_ENOMEM;
}
err = rt_hw_spi_device_attach(DEV_SPIBUS, DEV_DEVNAME, GPIOC, GPIO_PIN_4);
if (RT_EOK != err)
{
rt_kprintf("Failed to attach the spi device: ERRCODE=%d", err);
return -RT_ERROR;
}
return RT_EOK;
}
/* 导出到自动初始化 */
INIT_COMPONENT_EXPORT(rt_hw_spi__init);
连接SPI从设备
spi_dev = (struct rt_spi_device *) rt_device_find(name);
if (!spi_dev)
{
rt_kprintf("[SPI] init run failed! can't find %s device!\n", name);
return;
}
else
{
rt_spi_configure(spi_dev, &cfg);
}
还可以用 INIT_APP_EXPORT 宏将上面连接SPI从设备的函数加入到RTT应用自启
但注意不能是INIT_COMPONENT_EXPORT组件自动初始化,因为这时候所需要的部分成员还没初始化呢。
SPI发送
//仅发送
rt_spi_send(spi_dev, str, strcnt);
//发送后接收n个字节
rt_err_t err = rt_spi_send_then_recv(spi_dev, str, strcnt, recv_buf, n);
注:如果接收到的都是 0xFF,则说明设备没工作,甚至没上电。
由于SPI有四种采样模式,如果采样模式配置错了,那么采样点不对会导致数据错解。这个是因为SPI没有容错机制,主从采样并没有协商或者通信机制导致的。
关于GIT
RT-Thread Studio是基于Eclipse开发的,对GIT的支持非常垃圾。
建议GIT管理和代码编写跳转查看都用VSCode。代码联想和跳转都只需要配好VSCode插件即可,这里不再赘述。