做HLW8032电能表项目中关于USART使用DMA接收定长数据的问题
1:由于HLW8032芯片一上电,芯片就会通过串口每隔50ms向STM32发送24字节的数据,且我不能通过STM32控制HLW8032发送数据,由于STM32初始化需要一段时间,所以当STM32接收数据时会出现丢包的情况。。
2:解决方法:使用USART空闲中断,在初始化时先不使能串口DMA,只打开串口,在STM32串口空闲时,跳入串口空闲中断,
先判断数据是否正确,是否接收到24个字节的数据,如果数据校验错误,将缓冲区清零,如果数据正确,关掉串口空闲中断,最后使能串口DMA和DMA。
//串口1中断
//做数据发送结束判断
void USART1_IRQHandler()
{
uint32_t clear=;
uint8_t i=;
if(USART_GetITStatus(DEBUG_USARTx,USART_IT_IDLE)!=RESET)
{
//判断数据是否正确
if(DMA_GetCurrDataCounter(DMA1_Channel5)!=||Check_True_Data()==)
{
//数组清零
for(i=;i<;i++)
{
DMA_Recive_Data[i]=;
}
}
else if(DMA_GetCurrDataCounter(DMA1_Channel5)==&&Check_True_Data()==)
{
//关闭串口空闲中断
USART_ITConfig(USART1,USART_IT_IDLE, DISABLE);
}
}
//注意:只有读取寄存器DR SR才能清楚空闲中断标志位
clear=USART1->DR;
clear=USART1->SR;
//使能DMA1,通道5
DMA_Cmd(DMA1_Channel5,ENABLE);
//使能串口DMA
USART_DMACmd(USART1,USART_DMAReq_Rx,ENABLE);
}


 

STM32串口遇到的一个问题的更多相关文章

  1. stm32串口之存储与解析

    最近在做一个小项目,需要用stm32串口接受Arduino发送的一个不定长的数据,并且解析数据,执行其中的命令:秉着不在中断中做过多任务的思想,我们将从串口中接受到的字符放到一个数组当中. 定义数组 ...

  2. STM32 串口DMA方式接收(转)

    STM32 是一款基于ARM Cortex-M3内核的32位MCU,主频最高可达72M.最近因为要在车机上集成TPMS功能, 便开始着手STM32的开发工作,STM32F10x系列共有5个串口(USA ...

  3. STM32串口寄存器操作(转)

    源:STM32串口寄存器操作 //USART.C /************************************************************************** ...

  4. STM32串口控制步进电机(原创)

    用的42步进电机: 厂家可能不一样,两项四线步进电机,里面有两个线圈.在电机什么电都没有接的情况下,用万用表测量四个管脚:两两短接(或者阻值很小)的为一组,可以分别接A+,a-剩余接B+,B-;顺序可 ...

  5. Stm32串口通信(USART)

    Stm32串口通信(UART) 串口通信的分类 串口通信三种传递方式 串口通信的通信方式 串行通信的方式: 异步通信:它用一个起始位表示字符的开始,用停止位表示字符的结束.其每帧的格式如下: 在一帧格 ...

  6. STM32串口打印输出乱码的解决办法

    前言 最近在试用uFUN开发板,下载配套的Demo程序,串口数据输出正常,当使用另一个模板工程,调用串口printf调试功能时,输出的却是乱码,最后发现是外部晶振频率不一样.很多STM32开发板都是使 ...

  7. stm32串口发送数据复位 第一个数据丢失

    http://blog.csdn.net/kevinhg/article/details/40991655 STM32串口发送必须先检测状态,否则第一个字节无法发出,发送完毕,必须检测发送状态是否完成 ...

  8. STM32串口通信UART使用

    STM32串口通信UART使用 uart使用的过程为: 1. 使能GPIO口和UART对应的总线时钟 2. 配置GPIO口的输出模式 3. 配置uart口相关的基本信息 4. 使能uart口的相关的中 ...

  9. STM32串口USART1的使用方法和程序

    通用同步异步收发器(USART)提供了一种灵活的方法来与使用工业标准NR 异步串行数据格式的外部设备之间进行全双工数据交换. USART利用分数波特率发生器提供宽范围的波特率选择,支持同步单向通信和半 ...

随机推荐

  1. 无限调用函数add(1)(2)(3)......

    无限调用函数,并且累计结果 其实这也算一道面试题吧,笔者曾经被提问过,可惜当时没能答上来...

  2. MySQL中Index Merge简介

    索引合并优化 官网翻译 MySQL5.7文档 索引合并是为了减少几个范围(type中的range类型:range can be used when a key column is compared t ...

  3. C# “不支持给定路径的格式”异常处理

    问题背景 无聊研究了一下怎么发送邮件(包含附件),但发现附带的文件路径除了报错就是报错,不知道为什么. 用了不下好几种方式,比如 var x = "E:\\Git\\cmd\\git.exe ...

  4. js基础——继承

    1.实现继承:原型链         function extend1() {//父类型           this.name = "张三";         }         ...

  5. H3C 配置静态及动态域名解析

  6. linux 处理器特定的寄存器

    如果你需要测量非常短时间间隔, 或者你需要非常高精度, 你可以借助平台依赖的资源, 一个要精度不要移植性的选择. 在现代处理器中, 对于经验性能数字的迫切需求被大部分 CPU 设计中内在的指令定时不 ...

  7. vue element UI el-table 表格调整行高的处理方法

    这是我在工作项目中遇到的问题,我想将标记处下方的表格高度调低一点,也就是想实现下面的这个效果: 代码调整如下: 说明: 缩小:行高到一定程度之后便不能缩小. 好像最小35px.各位可以试一下. 升高: ...

  8. Java中try catch finally执行

    直接上代码实例: public static void main(String[] args) {    System.out.println(test1()); } static int test1 ...

  9. 2019-9-20-SharpDx-的代替项目

    title author date CreateTime categories SharpDx 的代替项目 lindexi 2019-09-20 09:13:59 +0800 2019-09-20 0 ...

  10. Python3内置函数、各数据类型(int/str/list/dict/set/tuple)的内置方法快速一览表

    Python3内置函数 https://www.runoob.com/python3/python3-built-in-functions.html int https://www.runoob.co ...