本教程基于韦东山百问网出的 DShanMCU-F103开发板 进行编写,需要的同学可以在这里获取: https://item.taobao.com/item.htm?id=724601559592
配套资料获取:https://rtos.100ask.net/zh/freeRTOS/DShanMCU-F103
freeRTOS系列教程之freeRTOS入门与工程实践章节汇总: https://blog.csdn.net/qq_35181236/article/details/132842016
第5章 模块使用说明与STM32CubeMX配置
5.1 硬件模块和驱动对应关系
对于每一个模块,我们都编写了驱动程序。这些驱动程序依赖于STM32CubeMX提供的初始化代码。比如driver_oled.c里面要使用I2C1通道,I2C1的初始化代码是STM32CubeMX生成的:MX_I2C1_Init被用来初始I2C1本身,HAL_I2C_MspInit被用来初始化I2C引脚。driver_oled.c只使用I2C1的函数收发数据,它不涉及I2C1的初始化。换句话说,你要在自己的工程里使用driver_oled.c,还需要初始化相应的I2C通道、引脚。
观看模块的头文件就可以知道接口函数的用法,每个驱动文件里都有一个测试函数,参考测试函数也可以知道怎么使用这个驱动。硬件模块和驱动文件对应关系如下表所示:
模块 | 驱动 |
---|---|
板载单色LED | driver_led.cdriver_led.h |
按键(K1) | driver_key.cdriver_key.h |
蜂鸣器模块(有源) | driver_active_buzzer.cdriver_active_buzzer.h |
蜂鸣器模块(无源) | driver_passive_buzzer.cdriver_passive_buzzer.h |
温湿度模块(DHT11) | driver_dht11.cdriver_dht11.h |
温度模块(DS18B20) | driver_ds18b20.cdriver_ds18b20.h |
红外避障模块(LM393) | driver_ir_obstacle.cdriver_ir_obstacle.h |
超声波测距模块(HC-SR04) | driver_ultrasonic_sr04.cdriver_ultrasonic_sr04.h |
旋转编码器模块(EC11) | driver_rotary_encoder.cdriver_rotary_encoder.h |
红外接收模块(1838) | driver_ir_receiver.cdriver_ir_receiver.h |
红外发射模块(38KHz) | driver_ir_sender.cdriver_ir_sender.h |
RGB全彩LED模块 | driver_color_led.cdriver_color_led.h |
光敏电阻模块 | driver_light_sensor.cdriver_light_sensor.h |
舵机(SG90) | |
IIC OLED屏幕(SSD1306) | driver_oled.cdriver_oled.h |
IIC 陀螺仪加速度计模块(MPU6050) | driver_mpu6050.cdriver_mpu6050.h |
SPI FLASH模块(W25Q64) | driver_spiflash_w25q64.cdriver_spiflash_w25q64.h |
直流电机(DRV8833) | driver_motor.cdriver_motor.h |
步进电机(ULN2003) |
5.2 调试引脚与定时器
DshanMCU-103使用SWD调试接口,可以节省出TDI(PA15)、TDO(PB3)、TRST(PB4)三个引脚。其中PA15、PB3用于全彩LED,PB4用于直流电机。所以需要在STM32CubeMX里配置调试接口为SWD,否则全彩LED、直流电机无法使用。
DshanMCU-103中使用PA8来控制红外发射模块、无源蜂鸣器,PA8作为TIM1_CH1时用到TIMER1;全彩LED使用PA15、PB3、PA2作为绿色(G)、蓝色(B)、红色(R)的驱动线,这3个引脚被分别配置为TIM2_CHN1、TIM2_CHN2、TIM2_CHN3,用到TIMER2;直流电机的通道B使用PB4作为PWM引脚(TM3_CHN1),用到TIMER3。所以TIMER1、2、3都被使用了,只剩下TIMER4作为HAL时钟。
如下配置:
待续 。。。。