SMT32VET6执行到USART_ITConfig,进中断HardFault_Handler, 啥原因?

[复制链接]
4401|6
 楼主| chaoshuai 发表于 2013-6-6 10:06 | 显示全部楼层 |阅读模式
使用串口2的中断方式。
初始化函数
  1. void Fuc_RS232_USART_Configuration(void)

  2. {

  3.         GPIO_InitTypeDef        GPIO_InitStructure;                                                // 定义一个结构体

  4.         USART_InitTypeDef        USART_InitStructure;

  5.         NVIC_InitTypeDef        NVIC_InitStructure;

  6.         

  7.         USART_DeInit(USART2);

  8.         // 定义PA2 PA3 为串口1所用

  9.         // 定义UART2 TX(PA.2)引脚为复用推挽输出

  10.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;                                                // IO口的第10引脚

  11.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                                        // IO口速度为50MHz

  12.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                                        // IO口复用为推挽输出

  13.         GPIO_Init(GPIOA,&GPIO_InitStructure);                                                // 初始化串口1 输出IO口

  14.         // 定义USART2 Rx(PA.3) 为悬空输入

  15.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;                                                // IO口的第11引脚

  16.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                                        // IO口速度为50MHz

  17.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;                                // IO口悬空输入

  18.         GPIO_Init(GPIOA,&GPIO_InitStructure);                                                // 初始化串口1 输入IO口

  19.         

  20.         

  21.         

  22.         

  23.         USART_ClockInitTypeDef USART_ClockInitStructure;

  24.         USART_ClockInitStructure.USART_Clock = USART_Clock_Disable;

  25.         USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low;

  26.         USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge;

  27.         USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable;

  28.         /* Configure the USART1 synchronous paramters */

  29.         USART_ClockInit(USART2, &USART_ClockInitStructure);

  30.         // 串口2参数初始化定义部分,串口1参数为19200,8,1,N 使能接收和发送

  31.         USART_InitStructure.USART_BaudRate = 19200;

  32.         USART_InitStructure.USART_WordLength = USART_WordLength_8b;                        // 设置数据传输速率

  33.         USART_InitStructure.USART_StopBits = USART_StopBits_1;                                // 停止位 1位

  34.         USART_InitStructure.USART_Parity = USART_Parity_No;                                        // 不用校验位

  35.         USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;                // 不用流量控制

  36.         USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;                        // 使能接收和发送功能

  37.         USART_Init(USART2,&USART_InitStructure);                                                // 初始化串口1

  38.         

  39.         

  40.         // 使能串口2中断

  41.         NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;                // 3.0库以上   USART2_IRQChannel更改为USART2_IRQn

  42.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;

  43.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

  44.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

  45.         NVIC_Init(&NVIC_InitStructure);

  46.         

  47.         USART_ITConfig(USART2, USART_IT_TXE, ENABLE);

  48.         USART_Cmd(USART2,ENABLE);                        // 使能串口

  49. }
是什么情况啊?有谁遇到过?
IJK 发表于 2013-6-6 11:22 | 显示全部楼层
单步执行进去,看到底哪条语句造成的fault
pentral0311 发表于 2013-6-6 11:37 | 显示全部楼层
设备时钟有无打开,你的code中没看到

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);

mmuuss586 发表于 2013-6-6 12:59 | 显示全部楼层
香水城 发表于 2013-6-6 16:53 | 显示全部楼层
把hardfault发生时入栈的的stack frame贴出来看看
 楼主| chaoshuai 发表于 2013-7-4 11:04 | 显示全部楼层
大家好,最近在忙别的事情,也没空解决这个问题,
2楼
     单步执行到 USART_ITConfig(USART2, USART_IT_TXE, ENABLE); 这一句之后就进入 hardfault
3楼
      在执行这个函数之前,已经打开USART2的时钟了,RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
5楼
   
  还有就是,void USART2_IRQHandler(void) 这个函数当中加断电,怎么也加不进去,好像没有这个中断函数似的。

堆栈出错时

堆栈出错时
 楼主| chaoshuai 发表于 2013-7-4 12:00 | 显示全部楼层
应该是 配置完成串口之后,串口需要有中断执行,但是找不到串口中断函数入门,所以就进入 hardfault 。哪里配置的不对吗?需要怎么配置,串口中断函数才好用?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

9

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部