资讯动态

STM32-USART 05

发布时间:2026/8/21 9:50:08 来源:尧图企业网站定制
USART简介USART前置发送接送 双工可发送可接送 单工仅支持发送与接送的一种 全双工同时进行发送与接收 半双工同一时刻进行发送或者接收同步异步 同步时钟 异步波特率电平特性 单端信号引脚高低电平相对于GND 差分信号俩引脚电压差电平标准 定义数据1和数据0的表达方式是传输线缆中人为规定的电压与数据的对应关系 标准 TTL电平3.3V或5V表示10V表示0 RS232电平-3~-15V表示13~15表示0 RS485电平俩线压差2~6V表示1-2~-6V表示0注意RS485电平标准是差分信号抗干扰能力强信号传输距离远可达上千米 TTL电平RS232电平标准信号最远只能几十米串口助手 HEX发送与显示 字符发送与显示 GBK UTF-8发送与显示--no-multibyte-chars注意字符 通过ASCII码表 对应16进制数 字 通过GBK UTF-8表 对应16进制数 GBK发送还是UTF-8发送取决于IDE的编码格式USART定义根据发送数据寄存器的一个字节的数据自动生成数据帧格式,通过发送移位寄存器从TX引脚发送出去自动接收移位寄存器内的数据帧时序拼接成一个字节数据存放在接送数据寄存器中注意接收数据寄存器只能保存一个字节的数据生产者产生数据太快消费者来不及消费就会导致中断阻塞并且丢数据的情况USART波特率 决定传输一位的时间单字节协议帧格式 起始 单字节数据 停止时序 TX/RX起始产生一个下降沿 数据传输高低电平翻转 停止产生一个上升沿注意TX时序单片机控制 RX时序外挂模块控制stm32f103c8t6资源 USART1 USART2 USART3数据的传输 低位先行通信速率 USART14.5Mbps APB272M波特率分频得到USART函数USART初始化函数函数使用 函数USART_Init 入参USART 结构体指针 返回值无USART_InitTypedef结构体成员变量函数调用示例​USART使能函数函数使用 函数USART_Cmd 入参 USART ENABLE / DISABLE 返回值无函数调用示例USART_Cmd(USART1, ENABLE);USART发送单字节数据函数函数使用 函数USART_SendData 入参USART 单字节数据 返回值无函数调用示例uint8_t a 0x88; USART_SendData(USART1, a);注意写入DR硬件自动清除TXE标志位USART接收单字节数据函数函数使用 函数USART_ReceiveData 入参USART 返回值单字节数据函数调用示例uint8_t data USART_ReceiveData(USART1);注意读出DR硬件自动清除RXNE标志位USART中断配置函数函数使用 函数USART_ITConfig 入参USART 中断标志位 ENABLE/DISABLE 返回值函数调用示例USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //开启串口接收数据的中断USART标志位USART发送模块函数Serial_Init:RCC_APB2PeriphClockCmd RCC_APB2PeriphClockCmd GPIO_Init USART_Init USART_Cmdvoid Serial_SendArray(uint8_t *arr, uint16_t length)//串口发送数组 void Serial_SendArray(uint8_t *arr, uint16_t length) { for(uint16_t i 0; i length; i) { USART_SendData(USART1, arr[i]); while(USART_GetFlagStatus(USART1, USART_FLAG_TXE)); } }void Serial_SendString(char *str)//串口发送字符串 void Serial_SendString(char *str) { while(*str ! \0) { USART_SendData(USART1, *str); while(USART_GetFlagStatus(USART1, USART_FLAG_TXE)); str; } }printf重定向int fputc(int ch, FILE *f) { USART_SendData(USART1, ch); while(USART_GetFlagStatus(USART1, USART_FLAG_TXE)); return ch; }USART接收模块函数void Serial_Init(void)RCC_APB2PeriphClockCmd RCC_APB2PeriphClockCmd GPIO_Init //将PA9引脚初始化为复用推挽输出 GPIO_Init //将PA10引脚初始化为上拉输入 USART_Init USART_ITConfig NVIC_PriorityGroupConfig NVIC_Init USART_Cmd串口接收中断服务函数void USART1_IRQHandler(void) { if (USART_GetITStatus(USART1, USART_IT_RXNE) SET) { //操作 } USART_ClearITPendingBit(USART1, USART_IT_RXNE); }

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价