STM32串口发送数据详解

发布者:pcwg最新更新时间:2016-10-10 来源: eefocus关键字:STM32  串口  发送数据 手机看文章 扫描二维码
随时随地手机看文章
串口的中断方式:

/**
* @brief Enables or disables the specified USART interrupts.
* @param USARTx: where x can be 1 or 2 to select the USART peripheral.
* @param USART_IT: specifies the USART interrupt sources to be enabled or disabled.
* This parameter can be one of the following values:
* @arg USART_IT_WU: Wake up interrupt. //唤醒中断
* @arg USART_IT_CM: Character match interrupt.//字符匹配中断
* @arg USART_IT_EOB: End of block interrupt. //块结束中断
* @arg USART_IT_RTO: Receive time out interrupt. //接收超时中断
* @arg USART_IT_CTS: CTS change interrupt. //CTS变化中断
* @arg USART_IT_LBD: LIN Break detection interrupt. //终止检测中断
* @arg USART_IT_TXE: Tansmit Data Register empty interrupt. //发送数据寄存器空中断
* @arg USART_IT_TC: Transmission complete interrupt. //发送完成中断
* @arg USART_IT_RXNE: Receive Data register not empty interrupt. //接收寄存器非空中断
* @arg USART_IT_IDLE: Idle line detection interrupt. //空闲线检测中断
* @arg USART_IT_PE: Parity Error interrupt. //奇偶校验错误中断
* @arg USART_IT_ERR: Error interrupt(Frame error, noise error, overrun error) //错误中断
* @param NewState: new state of the specified USARTx interrupts.
* This parameter can be: ENABLE or DISABLE.
* @retval None
*/

 
 
首先把数据手册的这部分内容贴出来
 
Character transmission procedure
1. Program the M bits in USARTx_CR1 to define the word length.
2. Select the desired baud rate using the USARTx_BRR register.
3. Program the number of stop bits in USARTx_CR2.
4. Enable the USART by writing the UE bit in USARTx_CR1 register to 1.
5. Select DMA enable (DMAT) in USARTx_CR3 if Multi buffer Communication is to take 
place. Configure the DMA register as explained in multibuffer communication.
6. Set the TE bit in USARTx_CR1 to send an idle frame as first transmission.
7. Write the data to send in the USARTx_TDR register (this clears the TXE bit). Repeat 
this for each data to be transmitted in case of single buffer. 
8. After writing the last data into the USARTx_TDR register, wait until TC=1. This 
indicates that the transmission of the last frame is complete. This is required for 
instance when the USART is disabled or enters the Halt mode to avoid corrupting the 
last transmission.
 
字符传输过程 
1。方案中USARTx_CR1的M位来定义字长。 
2。选择所需的波特率使用USARTx_BRR寄存器。 
3。计划在USARTx_CR2停止位的数目。 
4。通过写寄存器1 USARTx_CR1在UE位使能USART的。 
5。选择DMA使能(DMAT)在USARTx_CR3如果多缓冲器通信是采取 
地方。配置DMA寄存器在多缓冲器通信解释。 
6。设置在USARTx_CR1的TE位发送空闲帧作为第一次传输。 
7。写入要发送的数据在USARTx_TDR寄存器(这将清除TXE位)。重复 
这对每个数据进行的情况下单个缓冲器的传输。 
8。写在最后一个数据到USARTx_TDR寄存器后,等到TC=1。这 
表示最后帧的传输完成。这是必需的 
例如当USART被禁用或进入暂停模式,以避免破坏 
最后一次传输。
 
STM32串口发送数据详解 - 大海 - 大海的博客
 
首先仔细看看这个发送的数据时序图。
发现,USART_TDR没有数据的时候,也就是空,TXE会被置位,当往USART_TDR写数据的时候,TXE低
列出TXE,TCflag变化的条件
TXE:只要USART_TDR没有数据就被置位
TCflag:只有TXline数据全部发送出去才会中断。
发送过程:往USART_TDR里面写数据->TXline往外发送。
也就是TCflag置位会晚于TXEflag一个字符的时间。
 
 
字符传输过程 
 
(转)

1、 使能串口发送TE,此时USART_DR为空,此时应查询TXE是否置1,TXE置1,TX脚先发送一个空闲帧,把F1帧写入USART_DR,TXE被清零。因为这时正在发送空闲帧,所以写入USART_DR的数据被放入TDR寄存器,还没有拷贝到移位寄存器。
2、 在空闲帧发送完后,TDR寄存器中的数据被拷贝到移位寄存器,此时应查询TXE是否置1,TXE置1,表示TDR已空,可以放入下一个数据。此时在TX脚上将会发送F1帧的数据,同时软件把F2帧的数据写入USART_DR,TXE被清零。
3、 在F1帧的停止位发送完后,因为TDR寄存器中的F2还没被拷入移位寄存器,所以此时TXE仍为0,TC不置1.此时应查询TXE是否置1,TXE置1,表示TDR已空,可以放入下一个数据。此时在TX脚上将会发送F2帧的数据,同时软件把F3帧的数据写入USART_DR,TXE被清零。
4、 在F2帧的停止位发送完后,因为TDR寄存器中的F3还没被拷入移位寄存器,所以此时TXE仍为0,TC不置1.此时应查询TXE是否置1,TXE置1,表示TDR已空,后面没有数据写入USART_DR,TXE保持高电平,此时在TX脚上将会发送F3帧的数据。
5、 在F3帧的停止位发送完后,因为此时TXE为1,所以TC标志会置1.如果TCIE为1,将会产生中断。

串口发送注意几点:
1、 如果正在发送数据,写数据进USART_DR将会把数据写到TDR缓冲寄存器,在本次发送完成后,再把TDR中的数据拷贝进移位寄存器。
2、 如果当前没有发送数据,写数据进USART_DR将会把数据直接放到移位寄存器,不经过TDR,TXE被清零,然后发送开始,TXE被硬件置1。
3、 只有当一帧数据的停止位发送完成并且TXE为1,TC才会被置1


关键字:STM32  串口  发送数据 引用地址:STM32串口发送数据详解

上一篇:STM32配置时钟时注意设置FLASH等待周期
下一篇:STM32几种启动文件理解

推荐阅读最新更新时间:2024-03-16 15:14

STM32系列第30篇--DHT11温湿度传感器
电气特性: 工作电压:3.3V-5.5V 工作电流 :平均0.5mA 输出:单总线数字信号 测量范围:湿度20~90%RH,温度0~50℃ 精度 :湿度±5%,温度±2℃ 分辨率 :湿度1%,温度1℃ 其数据包由5Byte(40Bit)组成。数据分小数部分和整数部分,一次完整的数据传输为40bit,高位先出。DHT11的数据格式为:8bit湿度整数数据+8bit湿度小数数据+8bit温度整数数据+8bit温度小数数据+8bit校验和(校验和数据为前四个字节相加)。 数据发送流程: 首先主机发送开始信号(复位),即:拉低数据线,保持t1(至少18ms)时间,然后拉高数据线t2(20~40us)时间,然后读取D
[单片机]
<font color='red'>STM32</font>系列第30篇--DHT11温湿度传感器
STM32学习笔记——控制GPIO输出点亮LED灯(直接操作存储器)
一.预备知识 使用51单片机控制IO口相对来说要简单得多,最小系统搭建完毕后直接通过软件往各IO口写“1”或者写“0”即可。但使用STM32控制IO口输入输出却远没有这么容易,经过一个下午的查阅文献及探索后,略微有了头绪。 个人所使用的STM32F103VBT6有100个引脚,其中有五组GPIO(GPIOA…GPIOE),每组有16个GPIO端口(GPIOx_Pin0…GPIOx_Pin15)共80个,每个GPIO端口都有: 两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH); 两个32位数据寄存器(GPIOx_IDR,GPIOx_ODR); 一个32位置位/复位寄存器(GPIOx_BSRR); 一个16位复位寄存器(
[单片机]
<font color='red'>STM32</font>学习笔记——控制GPIO输出点亮LED灯(直接操作存储器)
基于STM32单片机的64Mbit单对单通信
简单的一种应用,ARM芯片作为master,flash为slaver,实现单对单通信。ARM主控芯片STM32F103,flash芯片为MACRONIX INTERNATIONAL的MX25L6465E,64Mbit。 SPI应该是嵌入式外围中最简单的一种应用了吧!一般SPI应用有两种方法:软件仿真,手动模拟产生时序和应用主控芯片的SPI控制器。 一般采用第二种方法比较好,比较稳定。应用主控芯片的SPI控制器,要点:正确的初始化SPI、操作SPI各寄存器和正确理解flash的时序。下面是过程,采用的是STM32F10X自带的库函数 1、初始化:void SpiFlashIniTIalzaTIon(void); 要知道
[单片机]
基于<font color='red'>STM32</font>单片机的64Mbit单对单通信
stm32中断嵌套实例分析
  STM32中断嵌套方法   STM32中断嵌套方法先说明: 所有中断要放在同一个组里, 因为只有组确定了, 4位描述占先式优先级和副优先级的位数才可以确定。   NVIC——Nested Vectored Interrupt Controller(嵌套中断向量控制器)   STM32有43个channel的settable的中断源:AIRC(Application Interrupt and Reset Register)寄存器中有用于指定优先级的4bits。这4个bits用于分配pre-emption优先级和sub优先级,在STM32的固件库中定义如下:   NVIC_PriorityGroup_0 ((u32)0x
[单片机]
<font color='red'>stm32</font>中断嵌套实例分析
STM32f103系列 USART2 串口2通信
最近在做一个工程要用到多个串口同时通讯的,就参考了正点原子的串口通讯例程,发现例程是USART1 串口1的,后面我想改成USART2 串口2的,上网找了资料,要不是不靠谱,要不就是要积分下载。所以后面自己写了一个可用程序来和大家分享! .c文件 #include usart2.h void USART2_Init(u32 My_BaudRate) { GPIO_InitTypeDef GPIO_InitStrue; USART_InitTypeDef USART_InitStrue; NVIC_InitTypeDef NVIC_InitStrue; // 外设使能时钟 RCC_APB2PeriphCl
[单片机]
基于STM32的EMS液晶显示触摸屏设计方案
0 引 言 电动车一直以清洁环保而备受关注,加上能源危机加剧、油价不断上涨,电动车也越来越受到用户的青睐。电动车一般采用锂电池供电,由多个单体电池串联成电池组作为动力电源。但由于各个串联单体电池特性不能保证完全一致,因此相同的电流下充电放电速度也会不同,如果不进行均衡干预,电池寿命会大大缩短,因此需要实时监控各个单体电池的状态、总电压、总电流,根据状态适时进行电池充放电均衡,并且充放电均衡时,均衡状态也要实时进行检测,所以就有了电动车电池能量管理系统(EMS)。实践证明EMS可以有效延长电动车电池使用寿命,是电动车中十分重要的管理系统。 EMS主要包括:信息采集模块、充放电均衡模块、信息集中处理模块以及显示模块。图1为自主研发
[单片机]
基于<font color='red'>STM32</font>的EMS液晶显示触摸屏设计方案
STM32与无源蜂鸣器
使用有源蜂鸣器,只能发出固定的”滴滴“声,当然不能满足于此呀。使用无源蜂鸣器,只要输出不同频率的PWM波,即可发出不同的音符。不同的音符组合起来就是一个曲子了。 1 乐谱简析 1.1 音阶 音阶是音乐必不可少的要素,主要由声音的频率决定。通过给蜂鸣器不同频率的音频脉冲,可以产生不同的音阶,而要产生某频率的音频脉冲,最简单的办法是算出该音频的周期,然后将此周期除以2即为半周期的时间。通过程序控制单片机某引脚半周期为“高”、半周期为“低”,不断交替变换,即可产生该频率的矩形波,接到蜂鸣器上就可发出该频率的声音。若想改变音阶,只需要改变半周期时间即可。下表为各音调音符频率对照表,据此可产生不同音阶的音符。“#”表示半
[单片机]
<font color='red'>STM32</font>与无源蜂鸣器
如何使用STM32实现systick的精确延时
SYSTICK寄存器初始化 void SysTick_Configuration(void) { if (SysTick_Config(SystemCoreClock / 100)) { while (1); } NVIC_SetPriority(SysTick_IRQn, 0x0); } SysTick_Config默认时钟为SysTick_CLKSource_HCLK,所以在这之前使用SysTick_CLKSourceConfig()选择系统时钟不会改变systick的时钟 static __INLINE uint32_t SysTick_Config(uint32_t ticks) { if (ticks 》 Sys
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved