STM32F4 串口程序 调试记录 hardfault_handle 问题
来源:互联网 发布:绿色上网软件手机软件 编辑:程序博客网 时间:2024/04/26 17:58
项目型号: Proj01_uart
// 从现在起开始使用项目型号,此程序调试通过
/*****************************************************************************
** 使用UART4通信
** TXD = PA0
** RXD = PA1
******************************************************************************
** 乔海权
** 14-04-03
******************************************************************************
** 调试记录
// 第一次失败了都??原因是什么??
// 判断是 GPIO 的模式设置错误,我记得有文档讲的,可是没找到啊??
// 解决办法:官网的设置 都是 GPIO_Mode_AF,试一下吧
// 先去官网下载一个 固件库,通用版本的,找到对应的具体芯片型号就OK. 不过有点卡 啊
// http://www.st.com/web/catalog/mmc/FM141/SC1169/SS1577/LN11/PF252140#
// 点击 all
// 第二次失败了,发现程序一直卡在 startup_stm32f4xx.s文件里面的 hardfault_handle 这里,不清楚是怎么回事
// 解决办法:网上提示 stm32f4xx_it.c文件没有,加入之后一直卡在 这个文件的中断处理函数里面,推测是硬件错误
// 第三次失败
// 把对应板子的头文件加进来试试, stm32f4_discovery.h
// 第四次失败,建议检查main.c 文件,是不是没注意到的地方
// 第五次失败,预定义里面添加 STM32F4XX
// 第六次失败,添加 system_stm32f4xx.h 之前遇到的中断可以OK,之所以找到这个文件,是通过对比 之前的例程,发现
// 里面并没有定义 SystemInit 这个函数,原来这个函数在 system_stm324xx.h 这个文件里面已经定义好了。这个函数推测是
// 设置 MCU 的初始化,包括时钟之类的。
// 总结,此次卡在 hardfault_handle 主要是 SysteInit这个函数,因为 这个函数会设置MCU 的一些默认参数,如果这个函数没有的话,MCU会进入硬件错误。
*/
#include <stm32f4xx.h>
#include <stm32f4_discovery.h>
// GPIO_TypeDef 是 寄存器的数组
//GPIO_TypeDef GPIO_InitStructure; //这行代码是错误的?
GPIO_InitTypeDef GPIO_InitStruct;
USART_InitTypeDef UART_InitStruct;
// 这个函数 在另外一个文件里面已经定义了
//void SystemInit(void)
//{
//}
void clk_configuration(void)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
}
// 为什么头文件改不了???
// keil 的 project里面的有些文件是 上面带个钥匙的,所以是锁着的??
// OK, 把文件的属性只读去掉就行,在电脑里面,不是keil
void gpio_configuration(void)
{
// TXD 引脚配置,输出
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
// 根据官网的写法,应该是 GPIO_Mode_AF
//GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_Init(GPIOA, &GPIO_InitStruct);
// RXD 引脚配置,输入, 我记得是有一个手册专门讲那个引脚配置成什么的,
// 为什么找不到了????
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1;
// 应该是 GPIO_Mode_AF
//GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;
// 如果是输入模式,下面的代码应该是不用的吧。开漏极,或者推挽输出??
// 官网的这句话是有的哈
//GPIO_InitStruct.GPIO_OType = GPIO_OType_OD;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;
// 上拉下拉设置
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
// 其实下面这句话,把结构体 GPIO_InitStruct 的参数写进 GPIOA 里面, GPIOA 是一个GPIO 的寄存器结构体
// 按顺序排列了 GPIO 的所有寄存器
GPIO_Init(GPIOA, &GPIO_InitStruct);
}
void uart4_configuration(void)
{
UART_InitStruct.USART_BaudRate = 9600;
UART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
UART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
UART_InitStruct.USART_Parity = USART_Parity_No;
UART_InitStruct.USART_StopBits = USART_StopBits_1;
UART_InitStruct.USART_WordLength = USART_WordLength_8b;
USART_Init(UART4, &UART_InitStruct);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource0, GPIO_AF_UART4);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource1, GPIO_AF_UART4);
}
void delay(unsigned int j)
{
while(j--);
}
// 根据 PDF文档里面讲的 alternate function mapping ,串口 4 映射到 AF8 里面,我是不是这个函数,
// 没写???
// 问题解决,确实是这个问题。
int main(void)
{
clk_configuration();
gpio_configuration();
uart4_configuration();
USART_Cmd(UART4, ENABLE);
while(1)
{
// 一直卡在下面这句话里面,为什么感觉 USART_IT_TXE 这个不太正确??
//while((USART_GetFlagStatus(UART4, USART_IT_TXE)) == 1);
// while((USART_GetFlagStatus(UART4, USART_FLAG_TXE)) == SET);
delay(10000);
// 下面这个函数居然跳不出来
USART_SendData(UART4, 'A');
}
}
- STM32F4 串口程序 调试记录 hardfault_handle 问题
- STM32F4采集核心板调试记录
- 串口调试工作程序出现问题
- linux串口调试记录
- VC2010_串口调试记录
- 调试STM32F4 VCP遇到的问题
- 串口调试程序
- 串口调试程序
- 串口程序调试总结
- 串口程序调试总结
- 串口程序调试总结
- STM32F4串口DMA配置
- VC2010_串口调试记录(三)
- linux 串口触摸屏调试记录
- 串口终端调试问题。
- linux串口调试问题
- 调试串口的问题
- 不用串口线调试串口通信程序
- 使用Struts2开发Java Web应用程序(目录)
- vs2012使用命令行编译的设置
- Github error – fatal: Unable to look up github.com (port 9418) (Name or service not known)
- RT-Thread基础一
- 快速排序算法
- STM32F4 串口程序 调试记录 hardfault_handle 问题
- 优化Python程序性能的15个小技巧
- Oracle创建表设置自动增长列范例
- HttpConnection详解【转】
- Android 多媒体开发 视频播放
- curl : tips
- 汽车品牌家谱(3)日产在售车型全解析
- 考试系统--SQL删除不掉数据
- 也谈C++中char*与wchar_t*之间的转换