使用示例
/*初始化USART 配置模式为 115200 8-N-1,中断接收*/
DEBUG_USART_Config();
printf("欢迎使用野火 电机开发板 步进电机 速度闭环控制 位置式PID例程\r\n");
printf("按下按键1增加目标值、按键2减少目标值\r\n");
printf("其他操作请使用PID调试助手\r\n"); /* 初始化时间戳 */
这样即可以打印到串口助手上。
基础原理
USART(Universal Synchronous/Asynchronous Receiver/Transmitter)是STM32微控制器内部集成的一个硬件外设,用于串行数据通信。它能够根据数据寄存器中的一个字节数据自动生成数据帧时序,并通过TX引脚发送出去,同时也可以自动接收RX引脚的数据帧时序,将其拼接成一个字节数据并存放在数据寄存器中。
波特率生成器
- 功能:USART内置波特率发生器,最高支持4.5 Mbps的速率。
- 工作原理:波特率发生器通过对输入时钟频率进行分频来生成所需的波特率时钟。例如,如果APB2总线提供72 MHz的频率,波特率发生器将对其进行分频,生成所需的波特率时钟。在这个时钟下进行数据的收发,即为指定的通信波特率。
配置选项
- 数据位长度:可配置为8位或9位数据长度。
- 停止位长度:可选0.5、1、1.5或2个停止位。
- 校验位:可选无校验、奇校验或偶校验。
- 模式支持:
- 同步模式:用于需要时钟信号的通信。
- 硬件流控制:用于避免数据丢失的问题。
- DMA(直接存储器访问):用于大量数据传输,减轻CPU负担。
- 智能卡模式:支持智能卡通信。
- IrDA(红外数据协会):用于红外通信。
- LIN(局域网络接口):用于汽车通信网络。
硬件流控制
问题:当A设备通过TX向B设备的RX发送数据,如果A发送太快,B处理不过来,就可能导致数据丢失。
- 解决方案:硬件流控制在硬件电路上多出一根线,用于反馈B设备的准备状态。
- 当B设备没有准备好接受数据时,发送高电平信号。
- 当B设备准备好接受数据时,发送低电平信号。
- A设备根据B设备的反馈信号决定是否发送数据。
- 作用:避免数据丢失的问题,确保数据传输的可靠性。
- 使用:STM32支持硬件流控制,但一般情况下不常用。
DMA支持
- 功能:USART支持DMA(直接存储器访问)用于数据传输。
- 优势:在进行大量数据收发时,DMA可以直接将数据从存储器传输到USART外设或从USART外设传输到存储器,减轻了CPU的负担,提高了数据传输效率。
STM32F103C8T6的USART资源
- USART1:连接在APB2总线上。
- USART2、USART3:连接在APB1总线上。
串口初始化
- 开启时钟:首先,打开USART和GPIO所需的时钟。
- GPIO初始化:将TX引脚配置为复用输出,将RX引脚配置为输入。
- 配置USART:使用一个结构体配置所有参数。
- 启用USART:
- 如果只需要发送功能,直接启用USART。
- 如果需要接收功能,还需配置中断。在启用USART之前,添加ITConfig和NVIC的相关代码。