微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

启用S​​ysTick控制和状态寄存器中的标志后,未调用SYS_TICK处理函数

如何解决启用S​​ysTick控制和状态寄存器中的标志后,未调用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 举报,一经查实,本站将立刻删除。