如何解决启用SysTick控制和状态寄存器中的标志后,未调用SYS_TICK处理函数
我正在使用STM32F407G-disC1板,启用SysTick控制和状态寄存器中位于0xE000E010存储器映射位置的标志后,未调用SYS_TICK处理程序。 SysTick重载值寄存器的值设置为15999。
void init_systick_timer(uint32_t tick_hz)
{
uint32_t *pSRVR = (uint32_t*)0xE000E014;
uint32_t *pSCSR = (uint32_t*)0xE000E010;
/* calculation of reload value */
uint32_t count_value = (SYSTICK_TIM_CLK/tick_hz)-1;
//Clear the value of SVR
*pSRVR &= ~(0x00FFFFFFFF);
//load the value in to SVR
*pSRVR |= count_value;
//do some settings
*pSCSR |= ( 1 << 1); //Enables SysTick exception request:
*pSCSR |= ( 1 << 2); //Indicates the clock source,processor clock source
//enable the systick
*pSCSR |= ( 1 << 0); //enables the counter
}
void SysTick_Handler(void)
{
}
解决方法
我宁愿不要重新发明轮子,并使用标准的STM提供的CMSIS标头。
您定义寄存器的方式不正确。如果决定重新读取theis值,它将无法正常工作。编译器将简单优化从内存中读取的内容。他们必须是volatile
。
但是要抽象一下,您需要在NVIC控制器中启用中断。否则,systick计时器将仅设置未决标志,而不会调用处理程序。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。