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

2023-05-16

[cpp]  view plain  copy   在CODE上查看代码片 派生到我的代码片
  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. }  

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

[cpp]  view plain  copy   在CODE上查看代码片 派生到我的代码片
  1. else if(USART_GetITStatus(USART2,USART_IT_TXE)){  //串口2发送中断  

只能
[cpp]  view plain  copy   在CODE上查看代码片 派生到我的代码片
  1. if(USART_GetITStatus(USART2,USART_IT_TXE)){  //串口2发送中断  
因为如果全双工时是同时收发, 这是会不好处理。
stm32串口中断收发数据环形缓冲区的设计,这里采用的是环形队列做缓冲区。
--> stm32系统初始化要初始化哪些内容?
一般是时钟>中断>外设 
不过stm32初始化之后外设基本全关了,用哪个外设需要先开相应外设的时钟
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • HAL库的串口基础学习(包含串口接收不定长数据的实现)

    HAL库的串口基础学习 xff08 1 xff09 HAL库有一个特点就是对于许多外设的初始化以及功能操作 xff0c 都提供有一个weak版本的函数 xff0c 这是充分的展现出库名字的含义 xff08 Hardware Abstract
  • 解决头文件相互包含问题的方法

    所谓超前引用是指一个类型在定义之前就被用来定义变量和声明函数 一般情况下 xff0c C C 43 43 要求所有的类型必须在使用前被定义 xff0c 但是在一些特殊情况下 xff0c 这种要求无法满足 xff0c 例如 xff0c 在类C
  • 101. 对称二叉树

    101 对称二叉树 给定一个二叉树 xff0c 检查它是否是镜像对称的 例如 xff0c 二叉树 1 2 2 3 4 4 3 是对称的 1 2 2 3 4 4 3 但是下面这个 1 2 2 null 3 null 3 则不是镜像对称的 1
  • code

    class Solution public void push int node stack1 push node int pop int temp while stack2 empty while stack1 empty temp 61
  • c++ unordered_map

    include lt iostream gt include lt unordered map gt int main simple comparison demo std unordered map lt int char gt exp
  • opencv 打开网络摄像头

    闲着没事从同学那里找到了个openwrt xff0c 突然间想起来OPENCV可以很轻松的打开自带的摄像头 xff0c 刚开始学习OPENCV 打开过若干次笔记本的摄像头 xff0c OPENCV能否打开网络摄像头呢 xff1f 在百度上搜
  • opencv 识别网球 ,或者绿色的小球 输出重心坐标

    void image process IplImage image int iLowH 61 26 int iHighH 61 69 int iLowS 61 42 int iHighS 61 206 int iLowV 61 0 int
  • linux 下面如何安装Eigen

    linux 下面如何进行安装 Eigen 1 安装 xff1a sudo apt get install libeigen3 dev 2 调整 xff0c 默认安装路径是 xff1a usr include eigen3 cd usr in
  • matlab 怎么把二维数组画出三维的图像出来

    最近要用到matlab 来进行可视化显示以下数据 xff0c 把数据导入matlab 之后 是二维数组的数据 xff0c 想以数组的x和y 分别为x 和y 轴 xff0c 然后以数组相对应的数据为z 轴 xff0c 然后进行画图显示 cle
  • C++ 怎么批量读取多个文件

    C 43 43 怎么批量读取多个文件 char szName 100 61 39 0 39 sprintf szName 34 training wall clouser wall d pcd 34 j num wall 格式化输出文件名
  • ros 下面同步相机和IMU 两个topic

    This file is used for collecting data fromm imu and camera at the same time One camera and one imu include lt ros ros h
  • 线程和进程的区别与联系以及单线程多进程与单进程多线程的区别

    线程和进程 概念 进程 xff08 process xff09 xff1a 是指具有已一定功能的独立程序 xff0c 是系统资源分配的基本单位 xff0c 在内存中有其完备的数据空间和代码空间 xff0c 拥有完整的虚拟空间地址 一个进程所
  • QgraphicsScene类

    概述 QgraphicsScene类为管理大量的2D图形item提供了一个管理界面 xff0c 做为item的容器 xff0c 它配合使用QgraphicsView使用来观察items 例如线 xff0c 矩形 xff0c 文本或者自定义的
  • 最好的 Curl 学习指南,强烈建议收藏!

    来自 xff1a 阮一峰的网络日志 链接 xff1a http www ruanyifeng com blog 2019 09 curl reference html 简介 curl 是常用的命令行工具 xff0c 用来请求 Web 服务器
  • TCP超时与重传

    1 TCP重传 A 基于时间信息 设置RTO xff1a tcp协议对超时报文的处理响应比较剧烈 xff0c 如 xff1a i 基于拥塞控制机制 xff0c 减小发送窗口大小 限窗 xff1b ii 当一个重传报文段被再次重传时 xff0
  • tcpdump参数用法详解

    一直在linux下开发的人一定会用到tcpdump xff0c 下面就是关于tcpdump的使用方法说明 1 tcpdump的选项 a 将网络地址和广播地址转变成名字 xff1b d 将匹配信息包的代码以人们能够理解的汇编格式给出 xff1
  • 学习图像处理知识---EmguCV3.4图像ArUco Marker Detection--DetectorParameters 结构体

    好久没有更新了图像处理 ArUco Marker Detection 种汉明 海明 码的格子图 用于相机 相机姿态估计之标记检测 在Emgu CV Aruco Namespace 命名空间中 重要的检测结构体DetectorParamete
  • 仿真导航中2d Nav Goal后小车不能到达目标点

    古月老师的课程我在进行仿真导航过程中 xff0c 遇到了小车不能到达我在rviz中指定的2d Nav Goal的目标点 xff0c 并且反复震荡的问题 解决方法如下 xff1a 模型参数里左右轮参数搞反了 xff0c 互换一下即可
  • 超声波传感器测距原理

    超声波 ultrasonic waves xff1a 人类耳朵能听到的声波频率为20HZ xff5e 20KHz 当声波的振动频率大于20KHz或小于20Hz时 xff0c 我们便听不见了 因此 xff0c 我们把频率高于20000赫兹的声
  • stm32串口中断收发数据环形缓冲区的设计

    cpp view plain copy Function Name USART2 IRQHandler Description This function handles USART2 global interrupt request In