STM32开发总结

1. 软复位

*((u32 *)0xE000ED0C) = 0x05fa0004;    //实现系统复位

NVIC_SystemReset();

2.关中断和开中断(3.0库)

STM32F10x_StdPeriph_Lib_V3.1.2\Libraries\CMSIS\Core\CM3\core_cm3.h

__enable_irq();

__disable_irq(); 

__set_PRIMASK(1);  // 关除了EMI和FAULT中断

__set_FAULTMASK(1); //关除了EMI中断 

3.网口芯片复位时间可能需要调整

/* PHY Reset delay */ 
#define PHY_RESET_DELAY    ((uint32_t)0x000FFFFF) 

4.system_stm32f2xx.c的重要地方

#define VECT_TAB_OFFSET  0x00000 

#define PLL_M      25
#define PLL_N      200 

GPIOMode_TypeDef GPIO_Mode;   

 //GPIO_Mode_IN(输入),GPIO_Mode_OUT(输出),GPIO_Mode_AF(备用),GPIO_Mode_AN(模拟) 

GPIOSpeed_TypeDef GPIO_Speed;  

// GPIO_Speed_2MHz,GPIO_Speed_25MHz,GPIO_Speed_50MHz,GPIO_Speed_100MHz 

GPIOOType_TypeDef GPIO_OType;  

// GPIO_OType_PP(推挽输出),GPIO_OType_OD(开漏输出) 

GPIOPuPd_TypeDef GPIO_PuPd;    

 //GPIO_PuPd_NOPULL(无),GPIO_PuPd_UP(上拉输入),GPIO_PuPd_DOWN(下拉输入) 

对于模拟i2c采用开漏输出 

4. FLASH擦写时间和供电大小有关,供电电压越大,擦写时间越小,空间前4X16K,1X64K ,NX128

#define VoltageRange_1        ((uint8_t)0x00)  /*!< Device operating range: 1.8V to 2.1V */ ----FLASH_PSIZE_BYTE    (PSIZE 8)
#define VoltageRange_2        ((uint8_t)0x01)  /*! #define VoltageRange_3        ((uint8_t)0x02)  /*!

5. STM32  字节对齐关键字 __packed ,   存储模式--小端 

6.STM32的HardFault_Handler的问题

调式后发现进入了HardFault_Handler里死循环了。请问这个问题可能由啥原因引起的?

一般都是非法访问对应地址的数据出错,检查是否堆栈溢出,数组越界等等。

HardFault_Handler的调试 最简单的办法: 

在进入HardFault_Handler之后,根据堆栈指针查看堆栈,找到堆栈中最新的函数返回地址,到这个地址上去加断点,一步步根据汇编执行代码。很快就能找到出错原因,大多数是数组溢出,或者是指针初始化的问题。 

7. ISP升级,串口引脚是固定(PA9,PA10--UART1),不能随意更换。 

8. 采用串口总线方式,需将GPIO配置漏极开路,硬件外部必须上拉。

 

 
一见钟情 发表于11-06 13:46 浏览65218次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

一见钟情
一见钟情(大校)
金币:1529个|学分:3659个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号