串口usart工作需要设置哪些参数_串口中断设置

串口usart工作需要设置哪些参数_串口中断设置发送和接收的控制流程如下:1.初始化串口包括使能串口时钟,使能发送和接收,定义引脚,波特率,数据位长度,奇偶校验方式,停止位位数。

嵌入式系统中应用最广泛的一种通讯设备,只要三根线(TX,RX,GND),合适低速长距离通讯。发送和接收的控制流程如下:

1.初始化串口

包括使能串口时钟,使能发送和接收,定义引脚,波特率,数据位长度,奇偶校验方式,停止位位数。

使能串口模块接收中断,此时不能使能发送中断[炸弹]。

使能全局串口中断并设置优先级。

定义一个接收超时定时器,设置好超时值,并使能超时中断,这此定时器是关闭状态。

2. 发送

定义控制结构,

typedef struct txCtrl{
 u8 buf[TX_SIZE],//根据最长发送帧定义大小
 u8 idx;
 u8 len;//实际数据长度
}txCtrl_t;
txCtrl_t txCtrl;

2.1 数据准备

将发发送的数据装到txCtrl.buf,txCtrl.len=数据长度,txCtrl.idx=0。

2.2 启动发送

uartSend()
{
 //马上触发中断
 使能发送缓冲器空中断;
}

3. 接收

接收数据时会遇到一个问题,就是接到数据字节数是多少?一个帧数据接接收到什么时候才算结束?

解决这个问题,我们要使用到定时器。其原理是,接收到数据时,使能定时器,并设置超时时间为串口传输一个或几个字节的时间,注意,这个时间是随波特率变化的。如果定时器超时了,意味差这个帧结束了。

比如9600的波特率,起始位1,停止位1位,数据位8位,奇偶校验位0位,传输一个字节共10位的时间大约 10/9600=1ms.

定义控制结构,

typedef struct rxCtrl{
 u8 buf[RX_SIZE],//根据最长接收帧定义大小
 u8 len;//接收到的数据长度
}rxCtrl_t;
rxCtrl_t rxCtrl;

4. 中断服务

有两个中断服务要处理,一个是串口中断,一个是接收定时器超时中断。

串口中断
void usartISR(void)
{
 if( 发送结束中断标志==1 )
 {
 清除此标志
 关闭发送结束中断功能
 }
 if( txCtrl.len>0 ) 
 {
 //把数据装入串口数据寄存器
 DR = txCtrl.buf[txCtrl.idx++];
 txCtrl.len--;
 //最后一个字节
 if( txCtrl.len == 0 )
 {
 	 关闭发送缓冲器空中断,
 	 使能发送结束中断功能
 }
 }
 
 //收到数据
 if(接收数据缓冲器非空中断标志==1 )
 {
 使能并装填定时器的超时值
 rxCtrl.buf[rxCtrl.len++] = RD;
 } 
 }
接收定时器超时中断
void timerOutISR(void)
{
 Recevied = TRUE;//通知主程序处理
}
主程序
if(Recevied)
{
 处理长度为rxCtrl.len的接收数据
 //处理完要设置len为0
 rxCtrl.len=0;
 Recevied=FALSE;
}

注意⚠️,启动发送是使能发送缓冲器空中断,在发送最后一字节时关闭并使能发送完成中断,这样效率最高。也可以不用发送缓冲器空中断,都改用发送完成中断,但这样效率降低很多。

后面还会讲DMA方式,有什么不明白的,欢迎请留言。

码字很辛苦,谢谢转发与点赞。

串口usart工作需要设置哪些参数_串口中断设置

9DB针引脚定义

串口usart工作需要设置哪些参数_串口中断设置

串口数据帧示意

串口usart工作需要设置哪些参数_串口中断设置

USB转接串口

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/11956.html

(0)

相关推荐

  • 字节跳动 data数据平台_clickhouse github

    字节跳动 data数据平台_clickhouse github更多技术交流、求职机会、试用福利,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 ClickHouse 作为目前业内主流的列式存储数据库(DBMS)之一,拥有着同类型 DBMS 难以企及

    2023-05-24
    97
  • Andorid自定义相机,点击拍照,长按录制以及调用系统相机录制(相机系列二)[通俗易懂]

    Andorid自定义相机,点击拍照,长按录制以及调用系统相机录制(相机系列二)[通俗易懂]前言:本章是针对相机系列一衍生的,都是基于camera自定义的。可能网上也有很多资料或者文章,但是看完这两篇文章,你也肯定学会了自定义相机这块(仿微信点击拍照,长按录制);而且我觉得我文章的最大优势是用最简单的语言去描述代码。那么接下来同样是图文并茂。如果大家没有看相机系列一,…

    2023-07-14
    85
  • SQL 入门教程:子查询「终于解决」

    SQL 入门教程:子查询「终于解决」目录汇总:SQL 入门教程:面向萌新小白的零基础入门教程 SELECT 语句 是 SQL 的查询。我们迄今为止所看到的所有 SELECT 语句都是简单查询,即从单个数据库表中检索数据的单条语句。 查询

    2023-04-20
    111
  • 使用Python安装OpenCV

    使用Python安装OpenCVOpenCV(Open Source Computer Vision Library)是一款开源的计算机视觉与机器学习软件库。OpenCV被广泛应用于图像处理、智能交通系统、人脸识别、医学图像分析等领域。本文主要讲解如何使用Python安装OpenCV。

    2024-05-05
    14
  • 【12c】Oracle Restart中的SRVCTL命令详解「终于解决」

    【12c】Oracle Restart中的SRVCTL命令详解「终于解决」SRVCTL,服务控制实用工具(Service Control Utility),可用于对Oracle Restart和Oracle RAC的配置和管理,本篇主要介绍SRVCTL命令在Oracle R

    2023-03-05
    112
  • 开源的自定义表单设计器基础源码,PC端+移动端[亲测有效]

    开源的自定义表单设计器基础源码,PC端+移动端[亲测有效]介绍自定义表单设计器,这是一个现代化应用中一个加分的模块,目前很多大型的系统都会存在很多表单,针对不同的客户,可能表单都会不一样,而且不够灵活,

    2023-06-27
    91
  • 内建质量,你真的了解么?「建议收藏」

    内建质量,你真的了解么?「建议收藏」内建质量定义 内建质量作用在开发过程中,要求软件生命周期之间参与的各个角色都需要实时的对软件的质量负责。确保软件在交付到下一环节前已经有了基础的质量保证。其核心目的就是减少因为质量问题导致的返工,而…

    2023-02-26
    108
  • Python程序员: 用代码实现你想要的功能

    Python程序员: 用代码实现你想要的功能随着互联网的发展,代码已经渐渐成为了一个人在信息时代中的必备技能之一。而Python作为一种简单易学、功能丰富的编程语言,已经成为了各行各业中广泛使用的工具。Python程序员可以用代码实现各种各样的功能:爬取网页数据、解析数据、制作数据可视化图表等等。Python程序员可以做的事情多种多样,本文将介绍几个常见的方面。

    2024-02-11
    47

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注