STM32开发记录
PVD(可编程电压检测器)
- 在Lib中加入
stm32f10x_pwr.c
和bkp.c
文件。 - 去掉
conf.h
中的两个注释。 - 开启时钟APB1的BKP和PWR。
- PVD的中断位于EXTI16上的外部中断。
- 具体步骤:
- 缺省值设置
- 清中断标志位
- 选择中断线路、模式、触发方式
- 线路使能,初始化结构体
- 后备寄存器操作使能,设置电压阀值,启用PVD
- 中断的优先级推荐选择抢占最高级。
- PVD中断中保存的数据量与供电电源上的电容大小相关。
SPI(串行外设接口)
- 加入
spi.c
文件,去掉conf.h
中的两个注释。 - 开启时钟APB2(SPI1),开启端口复用。
- 配置SPI的MISO、MOSI、Clock、NSS(复用推挽输出,浮空输入)。
- 开发板上需失能不使用的SPI模块。
- 结构体数组初始化,包括模式、极性、相位、校验等。
- SPI的发送和接收需发送任意数据才能读取(因主设备提供时钟)。
- SPI的NSS引脚在硬件模式下可输入可输出,设置主模式时需调用
SPI_SSOutputCmd(SPI1, ENABLE)
。 - SPI全双工特性,读写同步进行,注意芯片的datasheet。
- 使用IO口模拟时序时,MOSI和MISO初始化引脚应置高。
I2C
- STM32的硬件I2C模块不稳定,建议使用软件模拟时序方式。
- FATFS32的MP3程序在支持中文文件名后,存在目录读取英文文件名失败的问题(已解决,指针地址未回送)。
CAN
- 设置寄存器前需先清空相应位。
- 设置CAN总线的工作模式和波特率。
- 设置发送报文的ID格式及参数。
- 关联相应的中断,屏蔽过滤寄存器与FIFO关联。
中断
- 中断名称在
stm32f10x_it.c
中查找添加。 - NVIC组管理中的中断通道名称在
stm32f10x_it.h
中查找添加。
定时器延迟函数
- 定时器更新标志位应在结构体初始化前清空。
Modbus CRC校验
- 串口发送数据时,检测定时器更新事件。
- Modbus的CRC16校验发送时低8位在前,高8位在后。
- 注意运算符优先级。
SD响应与数据地址
- SD命令的响应保存在SDIO_RESPx寄存器中。
- 写地址数据时,地址需乘以4。
C语言编程函数
strstr(str1, str2)
:判断str2
是否是str1
的子串。abs(int i)
:求绝对值。sqrt(a)
:开平方。sprintf
:将格式化字符串写入缓冲区。- 宏定义示例及用法。
- 字节内存填充,使用
__packed
关键词。 - C语言中的四种存储类别及其特点。