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

菜鸟提问,STM32F3X 串口UART

[复制链接]
黑色幽默diablo 提问时间:2015-6-27 14:03 /
最近在做STM32F3x系列的串口实验,使用中断一直无法接受发送数据,不知道哪里错了,请大神们指教。
程序:
void My_USART1_Init(void)
{
GPIO_InitTypeDef  GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;

  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA,ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//使能USART1时钟

       
  GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_7);
  GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_7);

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 ;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
       

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);


        USART_InitStructure.USART_BaudRate=115200;
        USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
        USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
        USART_InitStructure.USART_Parity=USART_Parity_No;
        USART_InitStructure.USART_StopBits=USART_StopBits_1;
        USART_InitStructure.USART_WordLength=USART_WordLength_8b;
       
        USART_Init(USART1,&USART_InitStructure);

        USART_Cmd(USART1 ,ENABLE);
        USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
        USART_ITConfig(USART1,USART_IT_TXE,ENABLE);
       
        NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
        NVIC_Init(&NVIC_InitStructure);
       
       
}

void USART1_IRQHandler(void)
{
        uint16_t res;
        if(USART_GetITStatus(USART1,USART_IT_RXNE)==SET){
               
                res=USART_ReceiveData(USART1);
                USART_SendData(USART1,res);
        }

}

int main(void)
{
        My_USART1_Init();
        while(1){};
}

另本人不明白,USART1_IRQHandler()函数是自动被调用吗?main()函数里没有这个函数?
收藏 评论6 发布时间:2015-6-27 14:03

举报

6个回答
回答时间:2015-6-27 14:25:15
USART1_IRQHandler是中断入口,达到中断条件以后自动进入的。
黑色幽默diablo 回答时间:2015-6-27 14:36:46
安 发表于 2015-6-27 14:25
USART1_IRQHandler是中断入口,达到中断条件以后自动进入的。

系统怎么知道进入这个函数呢?是根据这个名字来识别的吗?其他名字是不是就不行了。
另我运行后,进入了busfault_handle,然后就卡住了,请问是为什么呢?
QianFan 回答时间:2015-6-27 17:08:51
黑色幽默diablo 发表于 2015-6-27 14:36
系统怎么知道进入这个函数呢?是根据这个名字来识别的吗?其他名字是不是就不行了。
另我运行后,进入了b ...

看启动文件
小蚂蚁快溜跑 回答时间:2015-6-28 10:24:29
串口中断初始化试试
星辰一方 回答时间:2015-6-28 14:59:02
IRQ是中断句柄…,查启动文件……
回答时间:2015-6-30 11:26:14
楼上几位正解。

所属标签

相似问题

官网相关资源

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