stm32 里的0xFFFFFFul

表示常量类型的方法,就是放后面的;定义变量放前面。
“u”表示“unsigned”,无符号
“l”表示“long”,长整型
如果不加UL的话那就是默认的int型,UL后缀.也是一种强制转换方式.

“SysTick_LOAD_RELOAD_Pos”代表“0”
“SysTick_LOAD_RELOAD_Msk”代表“(0xFFFFFFul << SysTick_LOAD_RELOAD_Pos)”
typedef struct
{
__IO uint32_t CTRL; /!< Offset: 0x000 (R/W) SysTick Control and Status Register /
__IO uint32_t LOAD; /!< Offset: 0x004 (R/W) SysTick Reload Value Register /
__IO uint32_t VAL; /!< Offset: 0x008 (R/W) SysTick Current Value Register /
__I uint32_t CALIB; /!< Offset: 0x00C (R/ ) SysTick Calibration Register /
} SysTick_Type; //声明一个SysTick_Type型的结构体。

define SysTick ((SysTick_Type ) SysTick_BASE ) /!< SysTick configuration struct */

define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base

Address */

define SCS_BASE (0xE000E000UL) /!< System Control Space Base Address /

 CTRL_TICKINT_Set是一个宏定义,定义如下
/* CTRL TICKINT Mask */

define CTRL_TICKINT_Set ((u32)0x00000002)

define CTRL_TICKINT_Reset ((u32)0xFFFFFFFD)

上面代码中定义一个SysTick_Type类型的结构体实例SysTick,而从根本上来说这是一个地址,
就是STM32芯片内部分配给滴答时钟的实际地址0xE000E000UL+0x0010UL。SysTick->CTRL |= CTRL_TICKINT_Set;
就是给地址0xE000E000+0x0010 +0x000赋一个0x00000002的值,对应滴答时钟的CTRL寄存器的第2位置1

。即为开启中断的意思。 在该文中有详细的说明,个人觉得事实也本应是这样的,可是在我的core_cm3.h头文件中却找不到对SysTick寄存器定义相应的地址

/** \brief Structure type to access the System Timer (SysTick).
*/
typedef struct
{
__IO uint32_t CTRL; /!< Offset: 0x000 (R/W) SysTick Control and Status Register /
__IO uint32_t LOAD; /!< Offset: 0x004 (R/W) SysTick Reload Value Register /
__IO uint32_t VAL; /!< Offset: 0x008 (R/W) SysTick Current Value Register /
__I uint32_t CALIB; /!< Offset: 0x00C (R/ ) SysTick Calibration Register /
} SysTick_Type;

/* SysTick Control / Status Register Definitions */

define SysTick_CTRL_COUNTFLAG_Pos 16 /!< SysTick CTRL: COUNTFLAG Position /

define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /!< SysTick CTRL: COUNTFLAG Mask /

define SysTick_CTRL_CLKSOURCE_Pos 2 /!< SysTick CTRL: CLKSOURCE Position /

define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /!< SysTick CTRL: CLKSOURCE Mask /

define SysTick_CTRL_TICKINT_Pos 1 /!< SysTick CTRL: TICKINT Position /

define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /!< SysTick CTRL: TICKINT Mask /

define SysTick_CTRL_ENABLE_Pos 0 /!< SysTick CTRL: ENABLE Position /

define SysTick_CTRL_ENABLE_Msk (1UL << SysTick_CTRL_ENABLE_Pos) /!< SysTick CTRL: ENABLE Mask /

/* SysTick Reload Register Definitions */

define SysTick_LOAD_RELOAD_Pos 0 /!< SysTick LOAD: RELOAD Position /

define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL << SysTick_LOAD_RELOAD_Pos) /!< SysTick LOAD: RELOAD Mask /

/* SysTick Current Register Definitions */

define SysTick_VAL_CURRENT_Pos 0 /!< SysTick VAL: CURRENT Position /

define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /!< SysTick VAL: CURRENT Mask /

/* SysTick Calibration Register Definitions */

define SysTick_CALIB_NOREF_Pos 31 /!< SysTick CALIB: NOREF Position /

define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /!< SysTick CALIB: NOREF Mask /

define SysTick_CALIB_SKEW_Pos 30 /!< SysTick CALIB: SKEW Position /

define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /!< SysTick CALIB: SKEW Mask /

define SysTick_CALIB_TENMS_Pos 0 /!< SysTick CALIB: TENMS Position /

define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /!< SysTick CALIB: TENMS Mask /

/@} end of group CMSIS_SysTick /

上面代码中却怎么也找不到SysTick 寄存器地址的定义,黄天不负有心人,最终还是找到了,
原来在正点原子提供的代码中,把所有的寄存器的结构体定义完之后,统一给各个寄存器定义了地址,

该定义在所有结构体定义的后面。代码如下:

/* Memory mapping of Cortex-M3 Hardware */

define SCS_BASE (0xE000E000UL) /!< System Control Space Base Address /

define ITM_BASE (0xE0000000UL) /!< ITM Base Address /

define DWT_BASE (0xE0001000UL) /!< DWT Base Address /

define TPI_BASE (0xE0040000UL) /!< TPI Base Address /

define CoreDebug_BASE (0xE000EDF0UL) /!< Core Debug Base Address /

define SysTick_BASE (SCS_BASE+0x0010UL) /!< SysTick Base Address /

define NVIC_BASE (SCS_BASE +0x0100UL) /!< NVIC Base Address /

define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control

你可能感兴趣的:(stm32dev)