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

有关蓝牙模块中断处理位不置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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版