完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
1.USART介绍
USART英文全称是Universal Synchronous/Asynchronous Receiver/Transmitter,即通用同步/异步串行收发器,是一个全双工(相互独立的接收数据与发送数据)的通用同步/异步串行收发模块,STM32中一般较为常用的为异步通讯模式,即UART模式 1.UART硬件连接 UART(异步通讯模式)一般通过三个管脚其他设备连接在一起:接收数据输入(Rx),发送数据输出(Tx),信号地(GND)。 2.UART数据格式 异步串行数据格式一般为:起始位+数据位+停止位,其中起始位为1bit,数据位为5,6,7或8bit,停止位为1,1.5或2bit; 起始位是值为0的位,停止位是值为1的位,数据位发送时是从LSB到MSB依次发送的,另外还有奇偶校验位和空闲位,奇偶校验位放置在数据位的最后,用来校验数据位的数据是否误码,空闲位是值为1的位,表明当前线路没有数据传输 3.UART工作原理1 发送数据过程:空闲状态,线路处于高电位;当收到发送数据指令后,拉低线路一个数据位的时间T,接着数据按低位到高位依次发送,数据发送完毕后,接着发送奇偶校验位和停止位(停止位为高电位),一帧数据发送结束。 接收数据过程:空闲状态,线路处于高电位;当检测到线路的下降沿(线路电位由高电位变为低电位)时说明线路有数据传输,按照约定的波特率从低位到高位接收数据,数据接收完毕后,接着接收并比较奇偶校验位是否正确,如果正确则通知后续设备准备接收数据或存入缓存。 4.UART采样时钟(波特率)2 在UART中使用波特率发生器进行时钟匹配,UART使用16倍数据波特率的时钟进行采样,在接收数据端通过过采样技术来区分有效数据输入与噪音,即每个位数据(bit)使用需要进行16次采样,最终采样值为第8,9,10次采样值,如果这三次采样值相同,则为本次位数据(bit)采样值,否则则认为本次数据无效,并置噪音错误。 2.UART配置(波特率)3 每个USART端口有7个寄存器,此处仅考虑UART通信用到的3个寄存器(其余寄存器请查阅STM32参考手册],包括 -状态寄存器(SR) [tr]寄存器名称功能[/tr]
[tr]寄存器名称功能[/tr]
[tr]寄存器名称功能[/tr]
Tx/Rx波特率 = Fplckx/(16*USARTDIV) 假设Fplck = 36MHz,波特率设置为9600bps 则USARTDIV = 36M/(16*9600)= 234.375 整数部分DIV_Mantissa = 234d = 0xEA,小数部分DIV_Fraction = 0.375d = 0x6 假如波特率设置为115200bps USARTDIV = 36M/(16*115200)= 19.53125,无法表示,只能约等于19.5进行表示,因此随着波特率上升(寄存器设置空间有限),UART通信会产生误码,且误码率随波特率上升而增加 -控制寄存器1(CR1) [tr]寄存器名称功能[/tr]
[tr]寄存器名称功能[/tr]
-发送配置 1.设置M位定义字长 2.设置STOP[1:0]定义停止位位数 3.设置BRR寄存器定义波特率 4.设置TE位使能发送 5.置位UE使能USART 6.将待发送数据写入DR寄存器中 -接收配置 1.设置M位定义字长 2.设置STOP[1:0]定义停止位位数 3.设置BRR寄存器定义波特率 4.设置RE位使能接收 5.置位UE使能USART,激活USART,开始寻找起始位 3.基于V3.5库函数的USART配置函数(野火开发板教程)4 /* * 函数名:USART1_Config * 描述 :USART1 GPIO 配置,工作模式配置。115200 8-N-1 * 输入 :无 * 输出 : 无 * 调用 :外部调用 */ void USART1_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; /* config USART1 clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); /* USART1 GPIO config */ /* Configure USART1 Tx (PA.09) as alternate function push-pull */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); /* Configure USART1 Rx (PA.10) as input floating */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); /* USART1 mode config */ USART_InitStructure.USART_BaudRate = 115200; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No ; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART2, &USART_InitStructure); USART_Cmd(USART2, ENABLE); } |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1617 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1543 浏览 1 评论
977 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
683 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1595 浏览 2 评论
1863浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
644浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
515浏览 3评论
531浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
504浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 06:09 , Processed in 0.854520 second(s), Total 76, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号