微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 新手求助大侠:STM32 USART1 能发送但进不了接收中断

新手求助大侠:STM32 USART1 能发送但进不了接收中断

时间:10-02 整理:3721RD 点击:
新手求助大侠:STM32 USART1 能发出数据但进不了接收中断
调试接收中断中,因无法通过才加上查询接收和发送完成中断发现:发送完成中断可以响应,
但接收无论是中断方式还是查询方式都接收不到数据
#include "stm32f10x.h"
#include <stm32f10x_gpio.h>
#include "stm32f10x_it.h"
//#include <stdarg.h>
#include <stdio.h>
/**        void USART1_Init(unsigned int baut)
  * @ 函  数  void GPIOx_Init(void)
  * @ 功  能  GPIO configue        
  * @ 说  明:
  * 入口参数:
  * 返回参数:
-----------------------------------------------------------------------
  */
void USARTx_Config(unsigned int baut)
{
        //波特率
        USART1->BRR =(int)72000000/baut; //
        //控制寄存器
        USART1->CR1=0x0000202c;                //USART使能UE、接收中断使能RXNEIE、8位数据位、无校验,
        USART1->CR2=0x00000000;                //停止位为00(1位)、
        USART1->CR3=0x00000000;
}
/**        
  * @ 函  数  void GPIOx_Init(void)
  * @ 功  能  GPIO configue        
  * @ 说  明:
  * 入口参数:
  * 返回参数:
-----------------------------------------------------------------------
  */
void GPIOx_Config(void)//调用库
{
        GPIO_InitTypeDef GPIO_InitStructure ;
        //GPIOA_Pin_9配置为输出
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
        
         //GPIOA_Pin_10配置为输入
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        GPIO_Init(GPIOA, &GPIO_InitStructure);        
}

/**        
  * @ 函  数  void VNIC_CONFIG(void)
  * @ 功  能  GPIO configue        
  * @ 说  明:
  * 入口参数:
  * 返回参数:
-----------------------------------------------------------------------
  */
void VNIC_Config(void)                          //嵌套中断初始化
{
        NVIC_InitTypeDef   NVIC_InitStructure;
        NVIC_InitStructure.NVIC_IRQChannel = 37;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
}
/**        
  * @ 函  数  void init_all_periph(void)
  * @ 功  能  GPIO configue        
  * @ 说  明:
  * 入口参数:
  * 返回参数:
-----------------------------------------------------------------------
  */
void all_periph_Config(void)         //
{
        SystemInit();                //
        //GPIOA、USART1、AFIO时钟开启
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1|RCC_APB2Periph_AFIO, ENABLE);
        GPIOx_Config();
        USARTx_Config(9600);
        VNIC_Config();
}
int main()
{
        unsigned char USA_DAT;
        all_periph_Config();
        USART1->DR = 'Q';
        while(1)
        {
                //调试中加上查询接收
                if(USART1->SR&0x20)                        //查询是否接受到数据
                {
                        USA_DAT=USART1->DR;
                        while(!(USART1->SR&0x40)); //上次数据未发完
                        USART1->DR=USA_DAT;
                }
        }
}

void USART1_IRQHandler(void) //串口中断处理程序         
{   
        
        unsigned long flag=0;
        if(USART1->SR&0x00000020)
        {
                while(USART1->SR&0x00000020)                //RXNE为1已接收
                {                                                         
                        USART1->CR1&=0xffffffdf;          //关闭接收使能
                        flag=USART1->DR&0xff;                  //读出
                        USART1->DR=flag&0xff;                  //送入发送寄存器
                        while((USART1->SR)&0x80==0); //等待数据移出
                        while((USART1->SR)&0x40==0); //确认发送完成
                        flag=USART1->SR;                 
                }
                  USART1->CR1|=0x00000020;                         //开启接收使能
        }
//发送完成中断,调试中加上
//        if(USART1->SR&0x00000040)
//        {
//                USART1->DR='7';                  //送入发送寄存器
//                while((USART1->SR)&0x80==0); //等待数据移出
//                while((USART1->SR)&0x40==0); //确认发送完成
//        }
}

已排除线路问题

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

网站地图

Top