中断部分
Cortex-M3 中断:Cortex-M3架构,对应Cortex-M3权威指南
Stm32f103中断:Stm32f10xx Cortex-M3编程手册
Stm32f10xx Cortex-M3编程手册 是 Cortex-M3权威指南的一个子集
STM32中断的重点是:
理解抢占优先级和子优先级
一个决定是否能中断嵌套,
一个决定响应顺序。
抢占优先级和子优先级,它们的级数(数量),
由 优先级分组 决定 (也就是AIRCR寄存器的 Bits[7:0])
STM32只使用其中Bits[7:4],也就是一部分。
中断设置注意事项:
通常中断优先级分组只会设置一次,设置完后,后续设置某个中断时,只需要在这个组中选择相应的抢占优先级和子优先级。
后续代码中,不应该在设置中断优先级分组,否则会导致中断顺序不按预期触发。
串口
串口传输数据的方式的两种方式:
- 使用 超时管理模式
串口收发数据:HAL_UART_Receive()
HAL_UART_Transmit() - 使用 中断模式:(效率更高)
HAL_UART_Receive_IT()
HAL_UART_Transmit_IT()
还有一种是 DMA模式,
使用DMA自动收发数据
HAL_UART_Receive_DMA()/HAL_UART_Transmit_DMA()
DMA的目的是 减轻CPU工作量。
在一些转移数据的操作中,如果让CPU来控制,会占用大量CPU。
如果是把外设A的数据,传给外设B,这种情况其实不需要CPU一直参与,只需在A、B之间创建个通道,让它们自己传输即可,这个通道就是DMA。
启动模式
- 从内部flash中启动
- 系统内存(Isp模式)
- SRAM中启动
三种启动方式,通过切换boot0和boot1的高低电平来实现。
一键ISP切换电路
mini开发板可以使用百问网提供的工具,直接进行isp下载,无需手动切换boot电平。
原理:
这里的控制BOOT0电平,是通过电脑编写的上位机,去控制串口芯片的RTS和DTR,去实现BOOT0和复位的控制。
上电后,CH340G的RTS和DTR都输出高电平。
电脑上位机软件控制DTR引脚输出低,PMOS管导通,电容C2充能,BOOT0逐渐变为高,
此时三极管Q2导通,复位拉低,MCU复位。
随后控制DTR输出高,PMOS管关闭,C2放电,BOOT1会保持一段时间高电平,
此时三极管Q2截止,RESET上拉,开发板启动,进入串口下载模式。
串口输出乱码
- 检查波特率
- 波特率没问题,检查时钟配置
- 中文乱码,英文不乱码,属于编码问题,可以使用vscode这类工具强制转换一下编码格式。