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

STM32F030C8T6 使用PA2 PA3做Usart2做串口接收进不了中断.请大神...

[复制链接]
liuf12334 提问时间:2017-7-19 09:38 /
本帖最后由 liuf12334 于 2017-7-19 09:43 编辑

使用的MDK-KEIL5 用的标准库.
相关代码
void Usart2_Init(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
       
        /* config USART1 clock */
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2 , ENABLE);
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
         /* Enable Syscfg */
// RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
       
  /* USART1 Pins configuration ************************************************/
  /* Connect pin to Periph  设置为复用功能 */
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_1);
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_1);   

  /* Configure pins as AF pushpull */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  GPIO_Init(GPIOA, &GPIO_InitStructure);  
       
                /* USART1 IRQ Channel configuration */
  NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPriority = 0x01;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);

        /* USART1 mode config */
  USART_InitStructure.USART_BaudRate = 9600;
  USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  USART_InitStructure.USART_StopBits = USART_StopBits_1;
  USART_InitStructure.USART_Parity = USART_Parity_No;
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
        USART_Init(USART2,&USART_InitStructure);       
        //USART_ClearFlag(USART1,USART_FLAG_RXNE);
        /* Enable USARTs Receive interrupts */
        USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);       
//         USART_ITConfig(USART1, USART_IT_ORE, ENABLE);  //溢出中断
        /* Enable the USARTs */
        USART_Cmd(USART2,ENABLE);       
}


/*   中断程序  */
void USART2_IRQHandler(void){
    if (USART_GetFlagStatus(USART2, USART_FLAG_ORE) != RESET)
    {  
        USART_ReceiveData(USART2);
        USART_ClearITPendingBit(USART2,USART_IT_ORE);               
    }  
        
        //接收中断处理程序就做了RXNE和ORE的清除操作,。
  if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)  //读_SR
//        if(USART_GetFlagStatus(USART1, USART_IT_RXNE) != RESET)  //不好用.
  {
                SilenceTime2 = 0;  //静默时间清0
    /* Read one byte from the receive data register */
    Rx2Buffer[Rx2Counter++] = USART_ReceiveData(USART2);  //读_DR               
                USART_ClearITPendingBit(USART2,USART_IT_RXNE);   //必须要清除
  }
}



硬件仿真时 使用串口调试工具发送数据.,但是一直进不了中断程序. 不知道是哪里错了.请大神们帮忙看看.
收藏 评论6 发布时间:2017-7-19 09:38

举报

6个回答
xmshao 回答时间:2017-7-19 11:34:01
你开启的是接收中断,你确定正确接收到数据了吗? 比方你用查询方式查RXNE标志。
如果根本没正确收到数据,检查基本外设配置、通信配置,硬件连接等。

如果有测得RXNE置位,检查中断矢量配置、中断服务程序与启动文件里的一致性等。

官方例程类似参考代码很多,你也可以参考下。
MrJiu 回答时间:2017-7-19 13:39:31
使用Cube工具,配置HAL库,很快就可以搞定的啦!!!
野火_firege 回答时间:2017-7-19 14:34:30
MrJiu 发表于 2017-7-19 13:39
使用Cube工具,配置HAL库,很快就可以搞定的啦!!!

030 用 HAL 库 ,芯片资源很紧缺吧
MrJiu 回答时间:2017-7-19 16:00:43
野火_firege 发表于 2017-7-19 14:34
030 用 HAL 库 ,芯片资源很紧缺吧

都差不多的啦!!!!
anobodykey 回答时间:2017-7-19 19:43:39
看起来问题不大,把PA2,PA3配置成推挽上拉试下呢
liuf12334 回答时间:2017-7-31 08:56:24
代码没问题.是我把串口调试工具的tx也接到电路板子上了.

所属标签

相似问题

官网相关资源

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