51单片机 和 STM32 的烧录方式和通信协议的区别
51单片机 和 STM32 的烧录方式和通信协议的区别
1. 为什么51单片机需要额外的软件(如ISP)?
(1)51单片机的烧录方式
ISP(In-System Programming):
原因:
(2)烧录过程
- 单片机复位并进入引导模式。
- 通过串口与PC通信,接收烧录数据。
- 将数据写入Flash存储器。
- 复位并运行用户程序。
2. 为什么STM32可以直接用Keil进行Download?
(1)STM32的烧录方式
SWD(Serial Wire Debug) 或 JTAG:
原因:
(2)烧录过程
- 通过SWD/JTAG接口连接调试器。
- Keil调用调试器的驱动,将程序下载到STM32的Flash中。
- 复位并运行用户程序。
3. STM32的波特率问题
(1)烧录时的波特率
(2)UART通信时的波特率
4. STM32的UART波特率设置
以下是STM32的UART波特率设置方法(以HAL库为例):
(1)计算公式
STM32的波特率计算公式如下:
[
\text{波特率} = \frac{\text{时钟频率}}{\text{分频系数}}
]
其中:
(2)代码示例
#include "stm32f1xx_hal.h"
UART_HandleTypeDef huart1;
void UART_Init(void) {
huart1.Instance = USART1;
huart1.Init.BaudRate = 115200; // 设置波特率为115200
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE;
huart1.Init.Mode = UART_MODE_TX_RX;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
HAL_UART_Init(&huart1);
}
int main(void) {
HAL_Init();
SystemClock_Config();
UART_Init();
while (1) {
// 主程序
}
}
5. 总结
特性 | 51单片机 | STM32 |
---|---|---|
烧录方式 | 通过串口(UART)使用ISP软件 | 通过SWD/JTAG直接烧录 |
烧录工具 | 需要额外软件(如STC-ISP) | 集成在Keil/IAR中,使用调试器 |
波特率 | 烧录时使用固定波特率(如9600) | 烧录时不涉及波特率(SWD/JTAG) |
UART通信波特率 | 需要设置波特率 | 需要设置波特率 |
6. 常见问题
(1)为什么STM32烧录时不涉及波特率?
(2)STM32的UART波特率可以修改吗?
(3)51单片机能否像STM32一样直接烧录?
作者:就叫飞六吧