如题
测试板子STM32F407VET6,使用HAL库+FreeRTOS+lwip+lvgl+Fatfs
功能:读取传感器数据,然后显示到屏幕上并通过lwip http上传服务器,同时判断是否触发报警,触发报警则播放报警音乐且LED灯也变红色。
用到了I2C1、I2C3、SPI1、SPI2、I2S3以及一堆uart等外设 其中SPI2还是多个设备的,每个设备对SPI设置不一样,有CS引脚进行切换。 目前针对SPI2 我用了个全局变量设备类型,每次对SPI2操作前判断当前设备和之前的设备类型是否一致,不一致就执行对应的spi_init 然后关闭所有SPI2片选 只打开当前设备的片选。 目前情况: SPI2读一个设备的时候,刚好另外一个任务触发SPI2写另外一个设备,判断SPI2还处于Locked状态导致操作失败。
之前搜了下用互斥锁,保证每一个外设操作时不会被打断,我在每个外设读写前后加上了获取和释放,但是很快就卡死了。
#define SPI2_MUTEX_WAITTIMEOUT 10000
#define SPI2_MUTEX_WAIT osMutexAcquire(SPI2MutexHandle, SPI2_MUTEX_WAITTIMEOUT)
#define SPI2_MUTEX_RELEASE osMutexRelease(SPI2MutexHandle)
// 外设读写前后分别加上SPI2_MUTEX_WAIT和SPI2_MUTEX_RELEASE但是程序马上卡死了
刚开始使用FreeRTOS,求问各个外设读写数据时,如何保证不被其他任务打断?
|