1、目录结构
在rtthread工程中一般有Drivers、DeviceDrive、Application、stm32_hal、kernel、finsh、libc、cortex-M3这八个目录,其中stm32_hal是官方驱动。kernel是rtt内核,finsh是rtt自带的控制台组件,可以进行简单的交互,有点类似低配版linux的命令行。libc是如果用到一些类似于time函数的库文件。cortex-m3就是ARM的M3内核相关东西了。这几个一般是不需要修改,libc根据需要自行增删。
2、Drivers目录
Drivers指的是底层驱动,比如一个串口设备,所用的时钟、引脚、波特率、数据位等都是在这里进行配置并将一个串口以类似于“uart1”的设备ID注册到系统中,然后抽象层才可以直接使用名字为“uart1”的设备。同样spi和其他外设也是一样的。
3、DeviceDriver目录
DeviceDriver属于应用层设备驱动了,里面完善了一个设备的操作过程。以串口为例,里面是串口设备的打开、关闭、控制等函数。这些函数都会在初始化时和抽象设备rt_device绑定,当调用rt_device_write()的时候会调用串口的write函数,其他设备类似。
使用外设时候需要在rtconfig中打开宏定义使用外设以及使用的外设名(比如RT_USING_UART和RT_USING_UART1),添加相关Drivers、DeviceDrivers、hal标准库驱动文件。msp在最新版的rtt402中msp级别驱动文件“Drivers/stm32f1xx_hal_msp.c”中很多外设没有打开,需要手动编写驱动程序,串口只写了一部分,没有全写,可以自己根据已有的去写。并且外部晶振的频率也不对,需要将board.c中的SystemClock_Config()函数中的RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL6;改为RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;他默认的是12M外部晶振,12*6=72M了,这里改为9是因为我用的8M晶振,改了这个还要改一下晶振频率,将stm32_HAL/system_stm32f1xx.c中的
#define HSE_VALUE 12000000U
改为#define HSE_VALUE 8000000U匹配自己用的板子外部晶振。
使用rtt出现问题是需要检查以上几个地方。