2019-07-14 23:16发布
依然落叶飘零 发表于 2014-10-27 01:24 系统发生中断的时候,程序调到中断向量表中对应的位置,中断向量表在starup_stm32f10x.hd.s这个启动文件中 ...
依然落叶飘零 发表于 2014-12-16 22:10 这个是滴答时钟定时器中SysTick_IRQn。starup_stm32f10x.hd.s文件中会有对应的定时器服务中断函数入口, ...
__函数 发表于 2014-12-16 23:41 我明白了,谢谢。觉得你研究的很深,能否给我解释一下这个问题/** @defgroup RCC_APB1_Peripherals * ...
依然落叶飘零 发表于 2014-12-17 12:44 我也是大概了解一下库是怎么回事,也没有具体去详细读过,就是大概知道原理而已。(PERIPH) & 0x09013600) ...
依然落叶飘零 发表于 2014-12-16 22:10 这个是滴答时钟定时器中SysTick_IRQn。starup_stm32f10x.hd.s文件中会有对应的定时器服务中断函数入口,就是SysTick_Handler这个。
最多设置5个标签!
__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
{
if ((ticks - 1) > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */
SysTick->LOAD = ticks - 1; /* set reload register */
NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Systick Interrupt */
SysTick->VAL = 0; /* Load the SysTick Counter Value */
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |
SysTick_CTRL_TICKINT_Msk |
SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */
return (0); /* Function successful */
}
请问,这个是从哪一句开始进入中断的呢?
是NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);
还是
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |
SysTick_CTRL_TICKINT_Msk |
SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */呢???
我明白了,谢谢。觉得你研究的很深,能否给我解释一下这个问题/** @defgroup RCC_APB1_Peripherals
* @{
*/
#define RCC_APB1Periph_TIM2 ((uint32_t)0x00000001)
#define RCC_APB1Periph_TIM3 ((uint32_t)0x00000002)
#define RCC_APB1Periph_TIM4 ((uint32_t)0x00000004)
#define RCC_APB1Periph_TIM5 ((uint32_t)0x00000008)
#define RCC_APB1Periph_TIM6 ((uint32_t)0x00000010)
#define RCC_APB1Periph_TIM7 ((uint32_t)0x00000020)
#define RCC_APB1Periph_TIM12 ((uint32_t)0x00000040)
#define RCC_APB1Periph_TIM13 ((uint32_t)0x00000080)
#define RCC_APB1Periph_TIM14 ((uint32_t)0x00000100)
#define RCC_APB1Periph_WWDG ((uint32_t)0x00000800)
#define RCC_APB1Periph_SPI2 ((uint32_t)0x00004000)
#define RCC_APB1Periph_SPI3 ((uint32_t)0x00008000)
#define RCC_APB1Periph_USART2 ((uint32_t)0x00020000)
#define RCC_APB1Periph_USART3 ((uint32_t)0x00040000)
#define RCC_APB1Periph_UART4 ((uint32_t)0x00080000)
#define RCC_APB1Periph_UART5 ((uint32_t)0x00100000)
#define RCC_APB1Periph_I2C1 ((uint32_t)0x00200000)
#define RCC_APB1Periph_I2C2 ((uint32_t)0x00400000)
#define RCC_APB1Periph_I2C3 ((uint32_t)0x00800000)
#define RCC_APB1Periph_CAN1 ((uint32_t)0x02000000)
#define RCC_APB1Periph_CAN2 ((uint32_t)0x04000000)
#define RCC_APB1Periph_PWR ((uint32_t)0x10000000)
#define RCC_APB1Periph_DAC ((uint32_t)0x20000000)
#define RCC_APB1Periph_UART7 ((uint32_t)0x40000000)
#define RCC_APB1Periph_UART8 ((uint32_t)0x80000000)
#define IS_RCC_APB1_PERIPH(PERIPH) ((((PERIPH) & 0x09013600) == 0x00) && ((PERIPH) != 0x00))
/**
* @}
*/
这是RCC.h文件中的一段,我不明白最后一个#define语句是什么意思?(PERIPH) & 0x09013600)是PERIPH取地址还是“按位与”?
我也是大概了解一下库是怎么回事,也没有具体去详细读过,就是大概知道原理而已。(PERIPH) & 0x09013600)这个是取地址,这个地址应该是是RCC_APB1ENR寄存器(不是很确定),这个看stm32参考手册。这句就是读取这个寄存器的值,再转换为PERIPH类型。个人感觉新手还是很难读懂官方的数据手,固件库只要大概了解他怎么实现的就可以了,了解原理。没必要去深入了解他怎样一步步现实的,会用就行了。对它有个总体的认识就可以了。刚开始我也不知道有中断他怎么就进入服务函数了,它怎么没有好像51那样在函数上面标明是中断服务函数,后来深入了解才知道他在启动文件里面定义了服务函数入口。现在我还在学stm32,学到FSMC,SDIO,USB这些,感觉更难了,没有像以前那样有固件库使用手册。本来英文又不好,资料都是英文的。如果你还遇到什么问题可以上来,大家一起探讨一下。希望你可以不像我那样,少走点弯路。
我的Q763612411,欢迎交流
怎么在定时器中断中做自己人想的事情呢?
一周热门 更多>