注意
cubeMX 导出配置,引脚位置在 xxxx_hal_msp.c 中
步骤
参考下面的改 board/Kconfig
1 | menuconfig BSP_USING_UART |
menuconfig
1 | scons --menuconfig 启用 uart,默认启用 |
cubeMX 导出配置,引脚位置在 xxxx_hal_msp.c 中
参考下面的改 board/Kconfig
1 | menuconfig BSP_USING_UART |
1 | scons --menuconfig 启用 uart,默认启用 |
修改 board/Kconfig,添加 TIM 部分,以下为参考
1 | menuconfig BSP_USING_TIM |
如果启用的定时器不自带,需要手工修改,修改libraries/HAL_Drivers/config/f4/tim_config.h,irq 部分参考 f1 的模板修改
1 |
1 | scons --menuconfig 启用 timer 配置 |
1 | mode 选择`Full-Duplex Master`全双工主模式,NSS Signal 选`Disable`即可 |
修改 board/Kconfig,添加 SPI 部分,以下为参考
1 | menuconfig BSP_USING_SPI |
1 | scons --menuconfig 启用 spi |
以 aht10 为例
用法见 这里
注意, 由于 aht 为温湿度传感器,因此,sensor 框架会抽象出 温度和湿度两个设备
1 | rt_hw_aht10_init("aaa", &cfg); |
list_device 查看结果
1 | device type ref count |
rtc 用于提供精确的实时时间,分为硬件 rtc 和软件模拟 rtc
1 | 硬件 rtc,cubeMX 里面配置的时候,选中`Activate Clock Source`,时钟树里面,rtc 的时钟需要配置为`LSE` |
修改 board/Kconfig,添加 rtc 相关部分,以下为参考
1 | menuconfig BSP_USING_ONCHIP_RTC |
如果没有硬件 rtc,则参考下面,选中软件 rtc 部分
1 | RT-Thread Components → |
我们使用 rtc 一般用于启用 NTP 时间自动同步,这个功能需要联网
先开启 ntp
1 | RT-Thread online packages → |
设置同步周期和首次同步的延时时间
1 | RT-Thread Components → |
1 | rtc 无论使用硬件还是软件模拟,目前只支持一个,名字就叫 rtc |
cubeMX 里面配置的时候,一定要注意,Clock Source 记得选一下,默认是 disable; ChannelX 选 PWM Generation CHX
一个定时器只能产生一个频率的 pwm,可以产生多个通道 pwm 信号,不同信道可以占空比不同但频率必须相同,否则会被后面启用的 pwm 覆盖
修改 board/Kconfig,添加 pwm 相关部分,以下为参考
1 | menuconfig BSP_USING_PWM |
如果启用的 pwm 不自带,需要手工修改,修改libraries/HAL_Drivers/config/f4/pwm_config.h
1 |
1 | scons --menuconfig 启用 pwm |
cubeMX 里面配置,选某定时器 TIM ,比如 TIM3,Combined Channels 里面,选择 Encoder Mode,记住下面 gpio 部分的两个引脚
修改 board/Kconfig,添加 pulse encoder 相关部分
以下为参考
1 | menuconfig BSP_USING_PULSE_ENCODER |
如果启用的 pulse encoder 不自带,需要手工修改
修改libraries/HAL_Drivers/config/f4/pulse_encoder_config.h
1 |
1 | scons --menuconfig 启用 pulse encoder |
如果发现旋转过程中突然产生了很大的数,需要改一下驱动
libraries/HAL_Drivers/drv_pulse_encoder.c, ,pulse_encoder_init方法内, sConfig.IC1Filter 和 sConfig.IC2Filter 都改成最大 15
但是不能根本解决,根本上解决的话,需要滤波电容。
修改 board/Kconfig,添加 i2c 的配置部分,以下为参考
1 | menuconfig BSP_USING_I2C1 |
1 | scons --menuconfig 启用 i2c |
1 | 目前 i2c 均为软件模拟 i2c |
1 | i2c scan |
修改 board/Kconfig,添加 dac 相关部分,以下为参考
1 | menuconfig BSP_USING_DAC |
1 | 复制 |
1 | 修改 |
修改 libraries/STM32F4xx_HAL/SConscript, 添加
1 | if GetDepend(["RT_USING_DAC"]): |
1 | 使用 cubeMX 配置项目, 启用 dac 和对应的 channel |
修改 board/Kconfig,添加 can 相关部分,以下为参考
1 | menuconfig BSP_USING_CAN |
1 | scons --menuconfig 启用 can |
一定要注意 cubeMX 里面的时钟配置apb1 peripheral clocks,这个和 PSC, BS1, BS2, SJW, 会共同影响波特率错误,导致收不到数据
波特率计算公式 baud = APB_PERIPHERAL_CLOCK / ( PSC*( BS1 + BS2 + SJW) )