本文是stm32f10x.h前半部分的阅读记录,总结了网友的使用经验。
stm32f10x.h版本号 3.5.0
**********************************************************************
C/C++编译器
**********************************************************************
#ifdef __cplusplus //见博客
extern "C" {
#endif
**********************************************************************
时钟
**********************************************************************
#define HSE_STARTUP_TIMEOUT ((uint16_t)0x0500) /*!< Time out for HSE start up */ //主要是在外部晶振时钟设置中使用。设置晶振启动稳定时间
PS1:
问:
GD32替代STM32需要修改这个宏定义:
#define HSE_STARTUP_TIMEOUT ((uint16_t)0x0500)
替换为
#define HSE_STARTUP_TIMEOUT ((uint16_t)0xFFFF)
HSE_STARTUP_TIMEOUT 主要是在外部晶振时钟设置中使用,改成这么大的值以后,那么晶振启动时间容许的时间更久了。GD32为什么要改值?
答:
物理起振时间基本上是一致的,只是 GD 认为读取更多的 CLK 进来会更可靠!
这个没有更多原因,就是 A 认为 5个可靠,B 认为 10 个可靠。没什么影响,就是个数。(注:曾经有人用ST出现过这种问题,HSE还没有稳定工作就超时了,改成0xFFFF后板子正常工作。)
PS2:
HSE (High Speed External Clock signal) 高速外部时钟信号
HSI(High Speed Internal Clock signal)
LSE(Low..)、LSI(Low..) (PLL锁相环是启动文件里用到的,不属于时钟)
HSE时钟是 STM32、STM8等系列MCU中的高速外部晶体振荡器,可由下面两个时钟源产生:
1. HSE外部晶体/陶瓷谐振器
2. HSE外部有源时钟
为了最大限度减小输出失真和减小启动的稳定时间,谐振器和负载电容应尽可能得靠近振荡器引脚。负载电容值应根据所选的振荡器进行调整。
#define HSI_VALUE ((uint32_t)8000000) /*!< Value of the Internal oscillator in Hz*/ //
stm32f10x.h中,默认外部晶振频率8000000Hz,如果你的系统的外部晶振不是8M,改成你的晶振频率就好了(如果不改,速度计算就会错,导致串口通讯时出问题)。
图方便就把整个项目的HSI_Value都改成了25000000。
**********************************************************************
stm32f10x 标准外设库版本号
**********************************************************************
#define __STM32F10X_STDPERIPH_VERSION_MAIN (0x03) /*!< [31:24] main version */
#define __STM32F10X_STDPERIPH_VERSION_SUB1 (0x05) /*!< [23:16] sub1 version */
#define __STM32F10X_STDPERIPH_VERSION_SUB2 (0x00) /*!< [15:8] sub2 version */
#define __STM32F10X_STDPERIPH_VERSION_RC (0x00) /*!< [7:0] release candidate */
#define __STM32F10X_STDPERIPH_VERSION ( (__STM32F10X_STDPERIPH_VERSION_MAIN << 24)\
|(__STM32F10X_STDPERIPH_VERSION_SUB1 << 16)\
|(__STM32F10X_STDPERIPH_VERSION_SUB2 << 8)\
|(__STM32F10X_STDPERIPH_VERSION_RC))
**********************************************************************
brief Configuration of the Cortex-M3 Processor and Core Peripherals Cortex-M3处理器简单配置和核心的外围设备
**********************************************************************
#ifdef STM32F10X_XL
#define __MPU_PRESENT 1 /*!< STM32 XL-density devices provide an MPU */
#else
#define __MPU_PRESENT 0 /*!< Other STM32 devices does not provide an MPU */
#endif /* STM32F10X_XL */
#define __NVIC_PRIO_BITS 4 /*!< STM32 uses 4 Bits for the Priority Levels */
#define __Vendor_SysTickConfig 0 /*!< Set to 1 if different SysTick Config is used */
其他部分参见本人文章:
stm32f10x_map.h(3.1以后不再使用)阅读记录 (对比老版的stm32f10x_map.h和3.5.0版stm32f10x.h)