QP端口到STM32和STM32CubeIDE



我需要一个非常简单的例子,将QP框架移植到基于C语言的stm32微控制器,并使用stm32cubeide,我对QP非常陌生,想了解更多。我从qm工具的blinky示例开始,将bsp.c更改为正确使用HAL函数,并将其移植到我的blinky-stm32f4项目中,我没有错误,并在micro中对其进行了编程,但它不能正确工作。当运行调试时,发现TimeEvt(时间事件(没有发生,状态转换也没有发生

完整的STM32Cube软件太大,无法安装在QP框架中。因此,带有QP框架的STM32的示例(用于几个STM32NUCLEO和Discovery板(仅使用STM32Cube的一部分。

因此,如果您希望使用完整的STM32Cube软件,您很可能需要通过STM32Cubeneneneba API调整初始化和与硬件的交互。这实际上仅限于应用程序中的BSP(板支持包(​与QP关系不大,QP在初始化板后接管。

因此,在您的情况下,必须确保QP的QF_TICK_X((宏以所需的频率定期调用。如果不发生这种情况,时间事件将不会得到服务,也不会发布到活动对象中。

通过在调试器中设置断点,可以很容易地检查QF_TICK_X((是否正在被调用。如果从未命中断点,则需要正确配置中断。

关于STM32Cube和QP的一个注意事项是确保正确配置ARM Cortex-M中断优先级。这是因为QP仅选择性地禁用中断;内核不知情";中断完全不受干扰。例如,这是FreeRTOS中也使用的常见做法。请阅读QP手册中的相关章节:

https://www.state-machine.com/qpc/arm-cm.html#arm-cm_kernel-aware

众所周知,STM32Cube会扰乱中断优先级(例如SysTick(,因此您需要确保SysTick优先级不会更改为";内核不知情";数量例如,如果STM32Cube将其设置为零,则需要再次将其更改为某个较大的优先级编号(Cortex-M使用的反向优先级方案中的优先级较低(。

相关内容

  • 没有找到相关文章

最新更新