金牌会员
 
- 积分
- 2317
- 金钱
- 2317
- 注册时间
- 2016-12-2
- 在线时间
- 354 小时
|
发表于 2018-12-14 15:54:18
|
显示全部楼层
SysTick运行的function, 主要看startup_xxxx.s里面的定义, 我这边看到的是运行 SysTick_Handler(),
而SysTick_Handler()具体内容是:
void SysTick_Handler(void)
{
HAL_IncTick();
}
所以以HAL的架构, 就是要加Tick count, 而HAL_IncTick()是可以被override的(参考stm32xxx_hal.c).
/**
* @brief This function is called to increment a global variable "uwTick"
* used as application time base.
* @note In the default implementation, this variable is incremented each 1ms
* in SysTick ISR.
* @note This function is declared as __weak to be overwritten in case of other
* implementations in user file.
* @retval None
*/
__weak void HAL_IncTick(void)
{
uwTick += uwTickFreq;
}
如果不想要修改HAL的代码和运行机制, 又要自己override SysTick中断应该要修改HAL_IncTick()
1. 先把上面的void HAL_IncTick(void)抄到自己的代码里面.
2. 把__weak去除, 编译时就会运行您写的代码而不是HAL的代码.
3. 保持void HAL_IncTick(void)里面运行的内容并且加入您自己的代码, 这样应该就可以了.
如:
extern __IO uint32_t uwTick;
extern HAL_TickFreqTypeDef uwTickFreq;
void HAL_IncTick(void)
{
// This is my code
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
//
uwTick += uwTickFreq;
}
|
|