| 2025.5.2晚 | 决定实现裸机方案 |
|---|---|
| 5.2晚 | 实现delay函数,usart函数,systerm函数封装 |
| 5.3凌晨 | 实现oled、DHT11温湿度函数封装 |
| 5.3晚 | 实现烟雾传感器的函数封装 |
| 5.4凌晨 | 初步探索语音模块的使用 |
| 5.5晚 | 编写RFID-RC522模块即NFC模块使用 |
| 5.6晚 | 完成驱动电机和火焰传感器模块编写 |
| 5.7晚 | 修改范例并提交 |
| 模块 | 连接方式 | STM32引脚 |
|---|---|---|
| OLED (0.96寸)#5V | I2C (硬件或软件) | SCL: PB6, SDA: PB7 |
| 温湿度传感器#3.3V | GPIO (如 DHT11/AM2302) | 数据引脚: PA0 |
| 烟雾传感器#3.3V | ADC | 输入引脚: PA1 |
| 温度传感器3.3V | ADC | 输入引脚:待定(目前预定PB1) |
| RFID卡 (NFC)#3.3V | SPI | MOSI: PA7, MISO: PA6, SCK: PA5, NSS(SDA): PA4,RESET:PB0 |
| 步进电机1 (PWM+STR)(门) | PWM + GPIO | PWM: PB3 (TIM2_CH2), STR1: PB4 |
| 步进电机2 (PWM+STR)(风扇/空调) | PWM + GPIO | PWM: PB10 (TIM2_CH3), STR2: PB11 |
| 语音控制模块#5V | UART1 | TX: PA9, RX: PA10 |
| 蓝牙模块3.3V | UART2 | TX: PA2, RX: PA3 |
| 按键 (4个) | GPIO | PB12, PB13, PB14, PB15 |
| 蜂鸣器#3.3V | PWM 或 GPIO | PB5 |
| 灯光 | GPIO | 引脚:待定(目前预定PA8) |
| 火焰传感器3.3V | GPIO/ADC | 引脚:待定(目前预定PB2) |
剩余引脚PA11, PA12, PA15 , PB6,PB7,PC13

首先实现裸机方案
第0个任务
建立BSP层、Systerm层
BSP层主要任务 抽象出各类硬件接口,封装好函数模块(用来存放编写好的oled等模块)
Systerm层任务 主要使用各类延时函数、usart函数
将学习rtos时的systerm文件夹移植到Drivers下,并在CuMX中将usart使能即可,然后将其生成的usart文件注释掉,将usart文件夹下的 .c .h文件改成 usart1.c uasrt1.h 防止报错然后出现隐式声明,然后在将是否支持OS改成 0 ,裸机不需要支持OS系统
OLED模块移植
方案:硬件IIC
将其使能,选择FastMode,速率改成100kHz即可,其他默认

然后将官方的例程进行修改
修改遇到问题
显示未定义I2C句柄,明明extern外部引用了还是没有,后面检查发现是i2c.c文件中的句柄I2C_HandleTypeDef hi2c1被误删了
将程序编写在main.c时一直不显示数据,出现了三个事故
void OLED_Refresh(void)里面加了10ms(建议使用delay_ms(),而不是HAL_Delay())的延时,稳定刷新成功率99%,偶尔也会有花屏效果,检查发现是电源供电跳变的原因(主要还是因为面包板)cubemx定义
将PA0口定义成输出模式,置高电平,速率拉到最高

然后将嘉立创的例程进行修改
https://wiki.lckfb.com/zh-hans/dkx-stm32f103c8t6/module/sensor/dht11.html
修改遇到问题
DHT11_GPIO_Mode_OUT函数中忘记给引脚输出速率了,拉到最高发现正常变化代码如下
结果如下

使用adc读取,打开adc选择模拟输入读取