stm32串口中断收发数据环形缓冲区的设计

发布者:心若清泉最新更新时间:2018-06-10 来源: eefocus关键字:stm32  串口中断  收发数据  环形缓冲区 手机看文章 扫描二维码
随时随地手机看文章
  1. /******************************************************************************* 

  2. * Function Name  : USART2_IRQHandler 

  3. * Description    : This function handles USART2 global interrupt request. 

  4. * Input          : None 

  5. * Output         : None 

  6. * Return         : None 

  7. *******************************************************************************/  

  8. void USART2_IRQHandler(void)  

  9. {      

  10.   BYTE bTByte;  

  11.   WORD wTPsn;  

  12.   

  13.   if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) //串口2接收中断  

  14.   {  

  15.     /* Read one byte from the receive data register */  

  16.     bTByte = (USART_ReceiveData(USART2));  

  17.     wTPsn  =  W_InSerial2;  

  18.     if(++wTPsn ==  MAX_SERIAL_LEN2) wTPsn  =  0;//修改指针边界  

  19.     if(wTPsn  !=  W_OutSerial2)  //队列没有满的情况下  

  20.     {  

  21.         B_SerialQueue2[W_InSerial2]  =  bTByte;  

  22.         W_InSerial2  =  wTPsn;  

  23.     }      

  24.     /* Clear the USART2 Receive interrupt */  

  25.     USART_ClearITPendingBit(USART2, USART_IT_RXNE);  

  26.   }  

  27.       

  28.   if(USART_GetITStatus(USART2,USART_IT_TXE)){  //串口2发送中断  

  29.         //此处加入发送串口数据组帧处理  

  30.           

  31.         /* Clear the USART2 Receive interrupt */  

  32.     USART_ClearITPendingBit(USART2, USART_IT_TXE);  

  33.     }  

  34. }  

判断串口是接收中断,还是发送中断,不能


  1. else if(USART_GetITStatus(USART2,USART_IT_TXE)){  //串口2发送中断  


只能


  1. if(USART_GetITStatus(USART2,USART_IT_TXE)){  //串口2发送中断  

因为如果全双工时是同时收发, 这是会不好处理。

stm32串口中断收发数据环形缓冲区的设计,这里采用的是环形队列做缓冲区。

--> stm32系统初始化要初始化哪些内容?
一般是时钟>中断>外设 
不过stm32初始化之后外设基本全关了,用哪个外设需要先开相应外设的时钟


关键字:stm32  串口中断  收发数据  环形缓冲区 引用地址:stm32串口中断收发数据环形缓冲区的设计

上一篇:STM32F10X USART 中断接受+发送,测试无误
下一篇:STM32的UART DMA传输总结

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

STM32安全固件更新的安全挑战
固件更新是我们软件生命周期中必须面临的问题。软件生命周期中有多种原因让我们需要固件更新,而固件更新也会带来安全问题,如使用固件更新来攻击电子钱包。 STM32 已经提供了很多的安全技术来应对固件更新的安全挑战。在这里和大家一起探讨,如何利用 STM32 安全技术,软件以及硬件安全技术,进行安全的升级固件。 讲座内容既包括了固件更新的一般原理,以及安全固件更新的额外设计。 安全固件更新离不开安全启动。STM32 安全启动为 STM32 安全固件更新提供了安全的运行环境。 什么是安全固件更新? 固件更新是指部分或者完全替换设备上的软件的操作,包括添加新应用,修改已有功能,或者去修复软件里的问题。安全固件更新,则是以安全的方
[单片机]
STM32+FreeRTOS+CUBEMX_学习笔记(三)
一、前言和目的: 在使用freertos的过程中,难免会遇到关于任务优先级和时间片分配的问题。为了更好的使用该系统,学习了下面的一些知识。 看freertos源文档 时间片调度 抢占式调度 对比两种调度的方式 二、freertos文档: 2.0、看看源文档: 源文档是个好东西啊,虽然网上的论坛和帖子里面都存在很多的答案,但是任何转述的东西或者自己的语言都经过了一定的加工和改造。虽然可能会让人更加容易理解,但是终究是不如源文档的正式和官方。 以下为对源文档的学习和翻译: 2.1、freertos任务定义: Tasks are implemented as C functions. The only thing speci
[单片机]
STM32+FreeRTOS+CUBEMX_学习笔记(三)
STM32 位带操作
Cortex-M3 支持了位操作后,可以使用普通的加载/存储指令来对单一的比特进行读写。   在 CM3 支持的位带中,有两个区中实现了位带。   其中一个是 SRAM 区的最低 1MB 范围, 0x20000000 ‐ 0x200FFFFF(SRAM 区中的最低 1MB);   第二个则是片内外设区的最低 1MB范围, 0x40000000 ‐ 0x400FFFFF(片上外设区中的最低 1MB)。   这两个区中的地址除了可以像普通的 RAM 一样使用外,它们还都有自己的 位带别名区 ,位带别名区把每个比特膨胀成一个 32 位的字。当你通过位带别名区访问这些字时,就可以达到访问原始比特的目的。   CM3 使用如下术语来表
[单片机]
STM32软件复位办法
在需要软件复位的地方添加如下两句代码: 1 2 __set_FAULTMASK(1); NVIC_SystemReset();
[单片机]
stm32单片机进入休眠(STOP)模式后无法下载程序等问题解决
利用stm32单片机的休眠模式,使单片机间歇的休眠从而实现低功耗的目的。往往会出现进入休眠后无法唤醒,导致下一次程序烧不进去。通常的解决办法是:一般的开发板或单片机最小系统都会有复位键,按住复位键,点下载,然后松开复位键即可。 我遇到的问题是:误入了stm32(STM32L051C6T6)的STOP模式,又没有写入相应的唤醒方法,导致后续的程序不能下载。使用MDK5 点击load时总会出现No target connected。自己设计的最小系统又没有加入复位键。。。 有以下几种解决办法: 1、可以将单片机的NRST引脚引出来,外接复位键。(关于引脚查看可用ST官方软件STM32cubeMX,很方便) 2、通过IS
[单片机]
<font color='red'>stm32</font>单片机进入休眠(STOP)模式后无法下载程序等问题解决
stm32的外设初始化步骤,以定时器为例。
我这个程序的目的在于让定时器开启更新中断,实现定时器1S中断一次然后在中断函数中LED电平翻转一次。 1.首先先开启这个外设的时钟:RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //开启定时器1 的时钟APB2 2.定义这个外设的初始化结构体:TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; //定时器模式初始化结构体 定义别名为TIM_TimeBaseInitStructure 3.把这个结构体内成员参数设置: TIM_TimeBaseInitStructure.TIM_Period = 999
[单片机]
STM32意外复位问题调试
最近在使用STM32座项目时遇到一个奇怪的问题。系统一开始运行很正常但是在长时间运行之后会随机的出现STM2单片机无故产生复位的问题。因为在调试的过程中收获颇多,所以打算记录一下这一次的调试过程。 首先做问题分析,既然单片机在运行一段时间之后会产生复位。那具体是什么原因引起的单片机复位呢?拍脑子一想会不会是没有及时喂狗导致看门狗溢出引起的复位。为了证明这一点我们查询了stm32的数据手册有关于复位源的介绍 由上面的描述我们可以知道在RCC_CSR中记录了单片机复位的类型。因此我们只要在单片机启动时去读取该寄存器中的对应状态位即可判断出单片机上一次是因为何种原因产生复位的。注意:RCC_CSR寄存器是需要软件清除的。如
[单片机]
<font color='red'>STM32</font>意外复位问题调试
如何利用定时器产生PWM波
摘要:利用定时器产生PWM波。然后利用32的外部中断和定时器来测量32输出的波形硬件:STM32F103C8T6核心板、示波器、串口调试助手所用到的的引脚为PA8和PA0。 测量方案:在第一次外部中断(上升沿触发)到之时,开启定时器,同时计数器清零。然后等待第二次中断到来,在第二次外部中断(上升沿触发)到之时,获取计数器的计数值,同时关闭计数器。因为知道了计数器计数一个数的时间,所以在第二次外部中断(上升沿触发)到之时,获取计数器的计数值,通过这个值就知道一个脉冲的时间周期。时间周期的倒数就是外部信号的频率。 一、利用TIM1的CH1产生PWM波 pwm.c #include pwm.h voidTIM1_PWM_Init
[单片机]
如何利用定时器产生PWM波
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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