STM32F103 USART2接收不到数据

2019-07-14 22:00发布

#include "LIB_Config.h"                                                          

void MY_NVIC_Configuration(void)//配置中断优先级   
{  
  NVIC_InitTypeDef NVIC_InitStructure;
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
  NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}


void MY_USART2_Init()
{
        USART_InitTypeDef tUSART;
        //NVIC_InitTypeDef NVIC_InitStructure;

        /* config USART2 clock */
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);

        /* USART2 mode config */
        tUSART.USART_BaudRate = 250000;
        tUSART.USART_WordLength = USART_WordLength_9b;
        tUSART.USART_StopBits = USART_StopBits_1;
        tUSART.USART_Parity = USART_Parity_No;
        tUSART.USART_HardwareFlowControl = USART_HardwareFlowControl_None;               
        tUSART.USART_Mode = USART_Mode_Rx;
       
        USART_Init(USART2, &tUSART);
          USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
        MY_NVIC_Configuration();       
        USART_Cmd(USART2, ENABLE);

}

uint16_t DmxData[20] = {0};
uint16_t DmxHeadFlag = 0;
uint16_t UDR = 0;
uint8_t OpenRecFlag = 0;
void USART2_IRQHandler(void)
{         
        static uint8_t dmxaddress = 0;  
        if(USART2->SR&(1<<5))//接收到数据
        {  
                UDR = USART2->DR;                       
                DmxHeadFlag =  UDR&0x100;
                if(DmxHeadFlag == 0)
                {
                        dmxaddress = 0;
                        OpenRecFlag = 1;
                }
                else
                {
                        if(OpenRecFlag)
                        {
                                DmxData[dmxaddress++] = UDR&0xff;
                        }
                        if(dmxaddress > 10)       
                        {
                                OpenRecFlag = 0;
                        }
                }
                USART2->SR &= ~(1<<5);                
        }
}

DMX512.png
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
venus5712
1楼-- · 2019-07-15 05:51
  1.         tUSART.USART_BaudRate = 250000;
  2.         tUSART.USART_WordLength = USART_WordLength_9b;
复制代码
250kbps  , 9 WordLength ???
lazyboneswu
2楼-- · 2019-07-15 09:14
venus5712 发表于 2015-8-25 16:13
250kbps  , 9 WordLength ???

250K,8个数据位,两个停止位,然后可以看成9个数据位,1个停止位,看成数据位的停止位在正常接收到的数据下是1,也就是第9位是1的情况下,是正常数据,如果第9位数据位是0,则表示是数据的开头,数据马上就要来了。

一周热门 更多>