案例使用64引脚的STM32F103C8T6芯片 设计功能:4个Input输入,7个Exit中断输入,2路PWM,3路ADC采样,1路I2C,1路USART,10路GPIO输出. 编译平台:用Keil5.3编译. 用CubeMX4.23创建项目ADC只有A1,A3可采样,A2永为0.不正常. 尝试用CubeMX5.3创建项目,3路ADC正常,但SysTick没有响应,即: HAL_SYSTICK_Callback函数没有响应. 使用SysTick做分时工作,采样和显示分别执行. SYSTICK没有响应,所以程序计数器无法工作. 在主程序中会造成计时不准. 对比过两CubeMX对SYSTICK的设置,移过来也无效,强制运行SYSTICKIRQ也无用. 请问是什么原因?解决的思路在那? 先谢谢了! |
你的系统比较复杂,建议加入RTOS系统,比如最简单的CMSIS_OS2等等。
评分
查看全部评分
您好!谢谢回复.
HAL_Delay正常,只是HAL_SYSTICK_Callback函数无效.我使用这个函数生成定时计数,而后用计数值做成类似分时操作.
这个函数在CUbeMX4.23中正常.在5.3中没有反应,试过返回错误信息,没有.
没有用OS.因为需要重新学习OS系统.
谢谢!
您好!刚试了挂载OS,可能是C8T6存储比较小,才设置了两个任务就报警了!我至少需要两个任务.
顺便说一下,MBED创建工程没有一点问题,所有功能都可以实现,但是明显速度较慢.就是说GPIO的效率比较低.
有道理,实际上已经采用Timer0作为自己的状态定时器了,谢谢!
谢谢所有回答此问题的朋友们!
我也是想用它的分时调度功能,结果不能用。正不想再开辟TIMX,感觉好浪费。
怀念以前的SYSTICK,可以在不影响系统的情况下多很多用途。
我查了一下,CubeMX 5.4
在stm32f1xx_it.c里面,中断函数SysTick_Handler肯定可以直接修改的:
在stm32f1xx_hal.c里面,__weak的HAL_IncTick函数不用动,需要就用自己写的同名函数(没有__weak修饰,编译时自动覆盖原来的):
05.{
06. /* USER CODE BEGIN SysTick_IRQn 0 */
07.
08. /* USER CODE END SysTick_IRQn 0 */
09. HAL_IncTick();
10. /* USER CODE BEGIN SysTick_IRQn 1 */
11.
12. /* USER CODE END SysTick_IRQn 1 */
13.}
在这里面定义了一个全局变量++,也做过外部函数跳转(例如闪个LED),但都不执行!