STM32入门学习笔记之USART驱动实验(上)

发布者:Wanderlust123最新更新时间:2024-09-19 来源: elecfans关键字:STM32  USART  驱动实验 手机看文章 扫描二维码
随时随地手机看文章

6.1 STM32串口简介

在之前的51单片机开发中已经详细地描述过串行通信协议,但是51中的串口有一个缺点,就是为了使用串口的波特率必须将晶振更换为11.0592MHz,如果采用12MHz晶振就会导致波特率误差太大,以致于串口无法正常收发,但是如果使用11.0592MHz晶振又会存在定时器计数误差(即定时器计数不准确),在STM32中很好地解决了这个问题,并且扩展了串口的应用。


STM32F103ZET6最多可提供5路串口,有分数波特率发生器、支持同步单线通信和半双工单线通讯、支持LIN、支持调制解调器操作、智能卡协议和IrDASIRENDEC规范、具有DMA等。STM32的USART模块结构框图如下图所示。

图片

我们可以从框图发现,STM32的波特率是低4位表示小数部分,高12位表示整数部分,这就是为什么STM32可以在不更换晶振的条件下使用串口通信


6.2 相关寄存器

6.2.1 控制寄存器USART_CR1

31302928272625242322212019181716
-














1514131211109876543210
-UEMWAKEPCEPSPEIETXEIETCIERXNEIEIDLEIETERERWUSBK

Bit 13:USART使能


0:USART分频器和输出被禁止


   1:USART模块使能

Bit 12:字长


0:一个起始位,8个数据位,n个停止位


   1:一个起始位,9个数据位,n个停止位

Bit 11:唤醒的方法


0:被空闲总线唤醒


   1:被地址标记唤醒

Bit 10:检验控制使能


0:禁止校验控制


   1:使能校验控制

Bit 9:校验选择


0:偶校验


   1:奇校验

Bit 8:PE中断使能


0:禁止产生中断


   1:当USART_SR中的PE为1时,产生USART中断

Bit 7:发送缓冲区空中断使能


0:禁止产生中断


   1:当USART_SR中的TXE为1时,产生USART中断

Bit 6:发送完成中断使能


0:禁止产生中断


   1:当USART_SR中的TC为1时,产生USART中断

Bit 5:接收缓冲区非空中断使能


0:禁止产生中断


   1:当USART_SR中的ORE或者RXNE为1时,产生USART中断

Bit 4:IDLE中断使能


0:禁止产生中断


   1:当USART_SR中的IDLE为1时,产生USART中断

Bit 3:发送使能


0:禁止发送


   1:使能发送

Bit 2:接收使能


0:禁止接收


   1:使能接收,并开始搜寻RX引脚上的起始位

Bit 1:接收唤醒


0:接收器处于正常工作模式;


   1:接收器处于静默模式

Bit 0:发送断开帧


0:没有发送断开字符


   1:将要发送断开字符


6.2.2 波特率寄存器USART_BRR

31302928272625242322212019181716
-














1514131211109876543210
USARTDIV_Mantissa[11:0]USARTDIV_Fraction[3:0]













Bit 15~Bit 4:波特率整数部分

Bit 3~Bit 0:波特率小数部分

注:波特率的计算公式

图片

6.2.3 数据寄存器USART_DR

31302928272625242322212019181716
-














1514131211109876543210
-DATA[8:0]














Bit 8~Bit 0:数据值


包含了发送或接收的数据。由于它是由两个寄存器组成的,一个给发送用TDR,一个给接收用RDR,该寄存器兼具读和写的功能。当USART_CR1中PCE位被置位进行发送时,写到MSB的值(根据数据的长度不同,MSB是第7位或者第8位)会被后来的校验位取代。当使能校验位进行接收时,读到的MSB位是接收到的校验位。


关键字:STM32  USART  驱动实验 引用地址:STM32入门学习笔记之USART驱动实验(上)

上一篇:探秘STM32U5安全特性|硬件加解密引擎与软件算法对比
下一篇:Stm32采用环形缓冲区接收rk3588的数据代码

推荐阅读最新更新时间:2024-11-17 11:49

STM32 外部中断简介
简介:STM32 IO 口中断的一些基础概念。STM32 的每个 IO 都可以作为外部中断的中断输入口,这点也是 STM32 的强大之处。STM32F103 的中断控制器支持 19 个外部中断/事件请求。 每个中断设有状态位,每个中断/事件都有独立的触发和屏蔽设置。STM32F103的19个外部中断为: 线0~15:对应外部IO口的输入中断。 线16:连接到PVD输出。 线17:连接到RTC闹钟事件。 线18:连接到USB唤醒事件。 在库函数中,配置GPIO与中断线的映射关系的函数GPIO_EXTILineConfig()来实现的: voidGPIO_EXTILineConfig(uint8_tGPIO_P
[单片机]
stm32中GPIOB->BSRR这句话是什么意思
GPIOB- BSRR = 0x01就是把GPIOB port 0升为高电平 GPIOB- BRR = 0x01就是把GPIOB port 0降为低电平 GPIOB- BSRR = 0x02就是把GPIOB port 1升为高电平 GPIOB- BRR = 0x02就是把GPIOB port 1降为低电平 GPIOB- BSRR = 0x04就是把GPIOB port 2升为高电平 GPIOB- BRR = 0x04就是把GPIOB port 2降为低电平 GPIOB- BSRR = 0x08就是把GPIOB port 3升为高电平 GPIOB- BRR = 0x08就是把GPIOB port 3降为低电平
[单片机]
STM32中DMA模块的使用
DMA(Direct Memory Access)常译为“存储器直接存取”。早在Intel的8086平台上就有了DMA应用了。 一个完整的微控制器通常由CPU、存储器和外设等组件构成。这些组件一般在结构和功能上都是独立的,而各个组件的协调和交互就由CPU完成。如此一来,CPU作为整个芯片的核心,其处理的工作量是很大的。如果CPU先从A外设拿到一个数据送给B外设使用,同时C外设又需要D外设提供一个数据。。。这样的数据搬运工作将使CPU的负荷显得相当繁重。 严格的说,搬运数据只是CPU的比较不重要的一种工作。CPU最重要的工作室进行数据运算,从加减乘除到一些高级的运算,包括浮点、积分、微分、FFT等。CPU还需要负责复杂的中断
[单片机]
<font color='red'>STM32</font>中DMA模块的使用
STM32中CAN总线接口发送和接收数据
☆ CAN协议基础知识 I2C.SPI总线多用于短距离传输,协议简单,数据量少,主要用于IC之间的通讯,而 CAN 总线则不同,CAN(Controller Area Network) 总线定义了更为优秀的物理层、数据链路层,并且拥有种类丰富、简繁不一的上层协议。与I2C、SPI有时钟信号的同步通讯方式不同,CAN通讯并不是以时钟信号来进行同步的,它是一种异步通讯,只具有CAN_High和CAN_Low两条信号线,共同构成一组差分信号线,以差分信号的形式进行通讯。 CAN物理层的形式主要分为闭环总线及开环总线网络两种,一个适合于高速通讯,一个适合于远距离通讯。CAN闭环通讯网络是一种遵循ISO11898标准的高速、短距离网络,它的
[单片机]
<font color='red'>STM32</font>中CAN总线接口发送和接收数据
STM32的通用定时器的知识及其配置
通用定时器大致有3个需要配置 1.时基配置 TIM_TimeBaseStructInit 2.外设输出PWM配置 TIM_OCStructInit 一般用来输出PWM的 3.外设输入捕捉配置 TIM_ICStructInit 对于来自与外面的信号进行输入捕捉,可以捕捉电平变化。 内容较多,本文不在叙述
[单片机]
STM32实现USART+DMA接收未知长度的数据和发送
前言:开始学USART+DMA的时候看到帖子《STM32 UART DMA实现未知数据长度接收》,觉得方法妙极了。此下出自此帖子——(整体的思路是这样的,一开始设置好DMA接收,可以把缓冲区长度设置为帧最大长度,我们可以把RX连接到定时器的管脚输入端,并且一开始设置输入并且使能引脚下降沿中断,当帧的第一个字节发送时,因为起始位为低电平,空闲时UART为高电平,满足条件,进入中断,禁止中断,并且在中断中开启定时器,该定时器工作在复位模式,上升沿复位,并且设置好定时器输出比较值为超时时间,比如20ms,这样,在传输后面字节时,肯定会有高低电平出现,即便是传输的是0x00,0xFF,虽然UART数据区不变,但是都为1,或都为0,但是因为
[单片机]
STM32 定时器周期动态修改
最近手头项目上有个需要模拟串口的地方,而模拟串口部分有这样的一个需求:当Strat信号来的时候启动定时器TIM3,到52us后采样Start信号是否是低电平,然后希望将定时器的周期改成104us,采样剩余的9个bit。 解决思路: ① 外部中断触发时候启动TIM3(同时关闭外部中断使能),等52us后在TIM3中断里判断Rx的状态; ② 如果是低电平就改变定时器TIM3的周期为104us; ③ 如果是高电平就不要接收了并恢复外部中断使能; ④ 在后续的9次中断里依次接收bit0...bit7还有STOP位; ⑤ 当接收到STOP位的时候就可以关闭TIM3了,然后再恢复外部中断使能; 知识难点: TI
[单片机]
<font color='red'>STM32</font> 定时器周期动态修改
低于一美金!32位MCU抢占8位市场
自2007年发布第一个ARM Cortex-M3架构的STM32基本型之后,意法半导体在单片机领域找到了市场大幅扩张的途径。根据iSuppli的统计资料显示,2008年意法半导体MCU收入年增长率达到38%,从2007年的第10位跃升至第五位。而今,意法半导体似乎已不满足于现有的32位产品市场份额,正逐步将STM32架构打入16位甚至8位市场应用中。 超值型STM32问世 随着客户对于计算的需求越来越高,比如家用电器,消费电子及工业控制中,8位MCU已经无法满足了,因此我们会推出在一美金以下的32位产品。 我们先来看看,这款批量售价低于1美金的STM32中,究竟有哪些特性: 整合24MH
[单片机]
低于一美金!32位MCU抢占8位市场
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved