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)  /*!<Device operating range: 2.1V to 2.7V */ -----FLASH_PSIZE_HALF_WORD (PSIZE 16)
 #define VoltageRange_3        ((uint8_t)0x02)  /*!<Device operating range: 2.7V to 3.6V */------FLASH_PSIZE_WORD(PSIZE 32)

 

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

 

6.STM32的HardFault_Handler的问题

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

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

HardFault_Handler的调试 最简单的办法:

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

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

 

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

 

你可能感兴趣的:(汇编,Flash,存储,UP,byte,delay)