两种选择
一、如果你不需要使用多个中断,且这些任务的优先级不多(就是说不指定哪个任务优于别的任务执行)的话,可以使用裸机,直接用STcubemx生成底层代码,然后在main.c的while(1)循环里面创建多个任务,比如一个任务用于监听键盘中断,一个任务用于监听串口,还有用于SPI采集等等
二、如果你需要使用多个中断,且优先级比较复杂的话,建议还是运行一个RTOS操作系统,目前ST官方支持的操作系统包括FREERTOS/UCOS等,直接创建任务,然后用STcubemx生成硬件底层代码与RTOS的底层代码即可
可以使用RTOS
USART1\2\3传输数据:根据你的要求的通讯实时性,是选择进程中查询响应,或是在中断中进行实时响应。如果要求不高可以采用查询的方法,把实时性要求高的使用中断。SPI1与传感器通信:这一部分可以放在一个进程中进行单独的控制。DMA数据传输:可以采用中断方式。外部键盘的中断控制,键盘的实时性一般要求不是太高,还要有消抖的时间,所以可以使用查询的方式放在一个进程中,不要占用中断线。如果不使用RTOS,只是跑裸机的话。也是类似的,要针对实时性要求进行配置,高实时性的要采用高中(断优)先级。没有实时性要求的可以放在main中的wihile里,也可以配置成低优先级。
1. 首先要確定您這些控制和接口有沒有絕對的先後順序,或者參數傳遞,並且持續交互
2. 如果沒有,則使用無系統的順序執行即可
3. 如果有,則使用RTOS方式,每個接口各自依照優先先後順序調度,並將Task之間Message透過參數傳遞,將能有效的管理和優化
4. 若使用RTOS,推薦FreeRTOS,一來是有模板可使用,二來是免費
以上供參考