RT-Thread 4.x STM32F107

官方文档很坑,新旧不分开,文档缺失/分类很乱
有些文档在IDE RT-STUDIO文档里,有些在RTThread标准版文档里,逆天

坑:不支持STM32CUBEMX的Advanced工程,记得重新保存生成basic工程才能用。不能使用.c/.h分离。

坑:适配CUBEMX工程的脚本要自己写
image

driver/stm32f1xx_hal_conf_bak.h不一定会生成或替换。
cubemx/下的

  • Src/main.c: main()建议使用编译器的__WEAK宏修饰
  • Inc/main.h: 注释掉void Error_Handler(void);的声明

image

写好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插件即可,这里不再赘述。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章