STM的USART窗口通讯程序
一、STM32的USART简介
通用同步异步收发器(Universal Synchronous Asynchronous Receiver and Transmitter)是一个串行通信设备,可以灵活地与外部设备进行全双工数据交换。
串行通信一般是以帧格式传输数据,即是一帧一帧的传输,每帧包含有起始信号、数据信息、停止信息,可能还有校验信息。USART就是对这些传输参数有具体规定,当然也不是只有唯一一个参数值,很多参数值都可以自定义设置,只是增强它的兼容性。
USART满足外部设备对工业标准(NRZ异步串行数据格式的要求,并且使用了小数波特率发生器,可以提供多种波特率,使得它的应用更加广泛。[USART]支持同步单向通信和半双工单线通信;还支持局域互连网络LN、智能卡(SmartCard)协议与IhDA(红外线数据协会)SIR ENDEC规范。
USART支持使用DMA,可实现高速数据通信,
USART在 STM32应用最多莫过于“打印”程序信息,一般在硬件设计时都会预留一个USART通信接口连接电脑,用于在调试程序是可以把一些调试信息“打印”在电脑端的串口调试助手工具上,从而了解程序运行是否正确、如果出错哪具体哪里出错等等。[1]
二、 USART功能框图
USART 的功能框图包含了USART最核心内容,掌握了功能框图,对 USART就有一个整体的把握,在编程时就思路就非常清晰。USART功能框图见下图:[1]
- ①功能引脚
- ②数据寄存器
- ③控制器
- ④小数波特率生成
- 校验控制
- 中断控制
具体内容请参考野火官方书籍《零死角玩转STM32——F103指南者》,或者STM32串口通信USART学习笔记。
三、 USART接发通信实验
USART只需两根信号线即可完成双向通信,对硬件要求低,使得很多模块都预留USART接口来实现与其他模块或者控制器进行数据传输,比如GSM模块,WIFI模块、蓝牙模块等等。在硬件设计时,注意还需要一根“共地线”。
我们可以将数据发送到串口调试助手,我们还可以在串口调试助手发送数据给控制器,控制器程序根据接收到的数据进行下一步工作。
以下将开展USART接发通信实验
任务要求如下:
1)设置波特率为115200,1位停止位,无校验位。
2)STM32系统给上位机(win10)连续发送“hello windows! ”,上位机接收程序可以使用“串口调试助手“,也可自己编程
3)当上位机给stm32发送“Stop,stm32”后,stm32停止发送。
3.1实验环境
①STM32核心板(stm32F103)
②MDK KEIL5
③实验所用串口:USART1
④驱动:CH340
3.2 硬件设计
3.2.1硬件原理图
CH340G芯片 的作用是将电脑的USB电平转换为串口的TTL电平。
因此在实验前,确保自己的电脑已经安装了CH340的驱动。
但一般我们在市面上买到的USB-TTL接线器已将整个模块焊接在整体了,这里大家只做个初步了解原理就行。
USB-TTL与STM32F103具体连接方式如下:
3.3 软件程序设计
- 核心代码-串口初识化
void uart_init(u32 bound){
//GPIO端口设置
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE); //使能USART1,GPIOA时钟
//USART1_TX GPIOA.9
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出