首页 > 其他分享 >CH5XX串口中断接收超时

CH5XX串口中断接收超时

时间:2024-07-02 09:21:22浏览次数:16  
标签:II UART UART1 中断 CH5XX 串口 超时 RECV

1.串口1初始化:

  /* 配置串口1:先配置IO口模式,再配置串口 */
    GPIOA_SetBits(GPIO_Pin_9);
    GPIOA_ModeCfg(GPIO_Pin_8, GPIO_ModeIN_PU);      // RXD-配置上拉输入
    GPIOA_ModeCfg(GPIO_Pin_9, GPIO_ModeOut_PP_5mA); // TXD-配置推挽输出,注意先让IO口输出高电平
    UART1_DefInit();

 2.串口1中断初始化:

    UART1_ByteTrigCfg(UART_7BYTE_TRIG);
    trigB = 7;
    UART1_INTCfg(ENABLE, RB_IER_RECV_RDY | RB_IER_LINE_STAT);
    PFIC_EnableIRQ(UART1_IRQn);

3.中断服务函数:

__INTERRUPT
__HIGH_CODE
void UART1_IRQHandler(void)
{
    volatile uint8_t i;

    switch(UART1_GetITFlag())
    {
        case UART_II_LINE_STAT: // 线路状态错误
        {
            UART1_GetLinSTA();
            break;
        }

        case UART_II_RECV_RDY: // 数据达到设置触发点
            for(i = 0; i != trigB; i++)
            {
                RxBuff[i] = UART1_RecvByte();
                UART1_SendByte(RxBuff[i]);
            }
            break;

        case UART_II_RECV_TOUT: // 接收超时,暂时一帧数据接收完成
            i = UART1_RecvString(RxBuff);
            UART1_SendString(RxBuff, i);
            break;

        case UART_II_THR_EMPTY: // 发送缓存区空,可继续发送
            break;

        case UART_II_MODEM_CHG: // 只支持串口0
            break;

        default:
            break;
    }
}

例程中的逻辑是中断接收到数据后通过串口1发送出去。

例程中设置触发点为7字节,当fifo中有7字节数据时则触发UART_II_RECV_RDY中断,若fifo中不满7字节,且传输四个字节的时间没有数据,则会触发UART_II_RECV_TOUT中断,若发送端数据一直在发送,则不会产生UART_II_RECV_TOUT中断。

那么如何判断一包数据结束呢,可以这样来实现,在UART_II_RECV_RDY中断中只收取触发点-1字节数据,这样最终一定会产生超时,进入超时中断则说明一包结束了。

标签:II,UART,UART1,中断,CH5XX,串口,超时,RECV
From: https://www.cnblogs.com/risc5-ble/p/18270264

相关文章

  • STM32串口如何输出中文
    当你想在串口调试助手实现换行功能时却不行时,试一试将\n改为\r\n因为我用的是XCOM串口调试助手,就遇到了这样的问题而当你加入intfputc(intch,FILE*f)函数却实现不了printf,putchar调用时需要加入#include<stdio.h>并勾选魔术棒中的UseMicroLIBintfputc(intch,FILE*f)......
  • 关于docker-compose up -d 出现超时情况处理
    由于要搭建一个ctf平台,用docker一键搭建是出现超时情况用了很多办法,换源,等之类的一样没办法,似乎它就是只能用官方那个一样很怪。只能用一种笨办法来处理了,一个个pull。打个比如:打开相对应docker-compose.yml文件可以看到image就是需要去下载的。那么此时你就可以通过手动指......
  • docker拉取镜像超时,配置代理拉取
    近日一些提供公有镜像仓库的组织宣布因监管要求被下架,导致我们很多镜像无法拉取,恢复日期暂不可知,所以只能使用一点魔法1.首先给服务器配置代理,这里使用的是V2free,官网地址如下https://w1.v2ai.top/doc/#/linux/clashhttps://w1.v2ai.top/doc/#/linux/clashweb.htm......
  • 乌龙!Hystrix命令执行超时!
    我在使用hystrix编写一个模拟命令执行超时的demo。1importcom.netflix.hystrix.*;2importlombok.extern.slf4j.Slf4j;34@Slf4j5publicclassHystrixTimeoutDemo{67staticclassTestCommandextendsHystrixCommand<String>{8Stringp......
  • quasar项目中用js调用串口
    参考链接:NodeSerialPort  (网站中https://serialport.io/docs/guide-electron提到了ElectronSerialportExample,这个项目中涉及到serialport的代码在renderer.js中)WebSerialAPI,web端通过串口与硬件通信电脑上已有的端口:(选择“在新标签页中打开图片”查看原图)看到网页......
  • Java串口框架jSerialComm替换rxtxcomm
    问题最开始使用的是rxtxcomm框架,部署时还要手动放驱动文件,而且后面没有进行维护,导致一些一些新系统不再支持,需要手动打包。<dependency><groupId>org.bidib.jbidib.org.qbang.rxtx</groupId><artifactId>rxtxcomm</artifactId><version>2.2</version><sc......
  • 一文带你了解STM32F4中断的概念,串口的概念,DMA的转运,以及如何运用在串口的收发上,串口收
    本篇主要实现的是用UART的接收中断接收数据,用DMA接收不定长的数据并发送回给电脑,接收信息控制LED灯的亮灭,成为点灯大师。什么是中断(EXIT)EXIT 外部中断/事件控制器,管理了控制器的20个中断/事件线。每个中断/事件线都对应有一个边沿检测器,可以实现输入信号的上升沿检测和下......
  • 基于STM32F103 HAL库 开发 串口通讯
    目录CubeMX配置调试配置​时钟配置打开串口2的中断配置串口2波特率等代码com.hcom.cCubeMX配置调试配置时钟配置打开串口2的中断配置串口2波特率等串口3同理就不展示了代码com.h#ifndef__COM_H__#define__COM_H__typedefstruct{ charTxBuffe......
  • delphi:利用定时器读取串口返回数据
    定时器20毫秒运行一次,单字符读取,如果读取到就保存到全局变量receData中,否则就输出到文本框中,并重置receData。优点:单字符读取,解决了按长度读取的弊端,如果按长度读取,很多时候并不知道究竟要读取多长,有的时候能读取完整,有的时候只读取了部分。procedureTfrmLC.tmrReceDataTimer(S......
  • [转帖]深入理解JDBC的超时设置
     https://www.cnblogs.com/Chary/articles/14958848.html 这是最近读到的讲关于JDBC的超时问题最透彻的文章,原文是http://www.cubrid.org/blog/understanding-jdbc-internals-and-timeout-configuration ,网上现有的翻译感觉磕磕绊绊的,很多上下文信息丢失了,这里用我......