微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > STM32F103 USART2接收不到数据

STM32F103 USART2接收不到数据

时间:10-02 整理:3721RD 点击:
#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);                
        }
}


看SR的状态,数据感觉不正常。


计划是接收DMX512的,用的是USART2。PA3是接收脚。
IO初始化
    GPIO_InitTypeDef tGPIO;
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE);
        //GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);   
        GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); //disable JTAG and release PB3 PB4 PA15 !
        /*----------------------------------------------------------------------------------*/
       
        //USART
        tGPIO.GPIO_Pin = GPIO_Pin_2;
        tGPIO.GPIO_Mode = GPIO_Mode_AF_PP;
        tGPIO.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &tGPIO);  
       
        tGPIO.GPIO_Pin = GPIO_Pin_3;
        tGPIO.GPIO_Speed = GPIO_Speed_50MHz;
        tGPIO.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        GPIO_Init(GPIOA, &tGPIO);

  1.         tUSART.USART_BaudRate = 250000;
  2.         tUSART.USART_WordLength = USART_WordLength_9b;

复制代码


250kbps  , 9 WordLength ?

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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top