zoukankan      html  css  js  c++  java
  • STM32串口遇到的一个问题

    做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=0;
        uint8_t i=0;
        if(USART_GetITStatus(DEBUG_USARTx,USART_IT_IDLE)!=RESET)
        {
                //判断数据是否正确
                if(DMA_GetCurrDataCounter(DMA1_Channel5)!=24||Check_True_Data()==0)
                {
                     //数组清零
                     for(i=0;i<24;i++)
                     {
                        DMA_Recive_Data[i]=0;
                     }
                }
                else if(DMA_GetCurrDataCounter(DMA1_Channel5)==24&&Check_True_Data()==1)
                {
                    //关闭串口空闲中断
                    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);
    }

     
    主要记录的是学习听课的笔记
  • 相关阅读:
    类加载器
    会话机制
    数据库读写分离
    代码优化工具
    杀毒软件框架设计
    树状结构
    spring依赖注入
    never stop believe yourself
    利用callKit实现电话防骚扰
    mac上使用使用rz,sz命令
  • 原文地址:https://www.cnblogs.com/chengeputongren/p/12177447.html
Copyright © 2011-2022 走看看