你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

有关蓝牙模块中断处理位不置1

[复制链接]
wzb10010 提问时间:2017-3-30 19:31 /
使用调试助手,在不向蓝牙模块发射字符时,能够显示字符‘B’,说明应该进入了中断。向蓝牙模块发射字符,不显示字符‘A’,应该是中断处理位不置1,这应该怎么解决,还是存在别的问题。
以下是我的程序:
#include "usart.h"

u32 tep;
u8 e;
void usart_config(void)
{
   
    /*1、打开GPIO,AFIO,USART1的时钟*/
    RCC_APB2PeriphClockCmd( RCC_APB2Periph_USART1 |RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
   
    /*2\初始化相应的串口引脚*/
    usart_release_gpio_init();  
   
    /*3、配置串口中断*/
    usart_nvic_config();
   
    /*4、配置串口模式*/
    usart_para_config();
}
void usart_release_gpio_init(void)
{
    GPIO_InitTypeDef GPIO_InitStruct;
   
    /*配置PA9为复用推挽输出*/
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStruct);
   
    /*配置PA10为浮空输入*/
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOA, &GPIO_InitStruct);
}
void usart_para_config(void)
{
    USART_InitTypeDef USART_InitStruct;
   
    USART_InitStruct.USART_BaudRate = 9600;               //蓝牙波特率设为9600;
    USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    USART_InitStruct.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
   
    USART_InitStruct.USART_WordLength = USART_WordLength_8b;  //8
    USART_InitStruct.USART_Parity = USART_Parity_No;          //n
    USART_InitStruct.USART_StopBits = USART_StopBits_1;       //1
   
    USART_Init(USART1, &USART_InitStruct);
   
    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);          //接收中断使能                  
    USART_ITConfig(USART1, USART_IT_TXE, ENABLE);           //发射中断使能
   
    USART_ClearFlag(USART1,USART_FLAG_TC);                  //清除发送完成标志位
    USART_ClearITPendingBit(USART1, USART_IT_RXNE);         //清除中断标志
   

    USART_Cmd(USART1, ENABLE);                              //使能串口 1
}
void usart_nvic_config(void)
{
    NVIC_InitTypeDef NVIC_InitStructure;
  
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
   
    NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;      //设置串口 1 中断
   
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级0
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;     //子优先级为 0
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;        //使能
    NVIC_Init(&NVIC_InitStructure);
}

int fputc(int ch, FILE*f)
{
    while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET)
    {
    }
    USART_SendData(USART1,(uint8_t) ch);
    return ch;
}
void USART1_IRQHandler(void)
{    printf("B");
    if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)        //中断产生
    {
        printf("A");
        tep+=USART_ReceiveData(USART1)<<e;              
        USART_ClearITPendingBit(USART1, USART_IT_RXNE);          //清除中断标志  
        e++;
    }
}
收藏 2 评论1 发布时间:2017-3-30 19:31

举报

1个回答
无薪税绵 回答时间:2017-8-10 10:39:20
进入中断,不一定就是接收中断,
也可能是发送中断,或者其它错误中断。
建议先搞清楚是什么引起中断,
然后,清除相关中断标志。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版