0%

使用FreeRTOS和ILI9341点亮LCD屏幕

使用FreeRTOS和上一篇中提到的ili9341芯片驱动点亮屏幕

CubeMX配置

  • SPI:

  • image-20211217213656004

  • DMA:

  • image-20211217213717712

  • NVIC(重要):

  • image-20211217213754825

  • 注意此处SPI、TIM1和DMA不要使用FreeRTOS 的中断函数,将对勾去掉,同时将中断优先级改为一个比FreeRTOS小的数字,比如2。假如使用了FreeRTOS的中断的话在Cube中无法修改这个数字为更小的值

  • FreeRTOS:

  • image-20211217213921708

  • 注意此处使用的是v1,尚未测试v2是否可以,其他内容(比如每个线程的堆栈空间之类的没有修改,默认应该是128字节)

程序配置

主程序中include如下

#include "ili9341.h"
#include "ili9341_font.h"
#include "ili9341_gfx.h"

同时添加

ili9341_t *_lcd;
ili9341_text_attr_t fontSend1;
ili9341_text_attr_t fontSend2;
ili9341_t *screenReturn(void)
{
return _lcd;
}

freeRTOS的C文件中添加上面的Include,此外还有

extern ili9341_text_attr_t fontSend1;
extern ili9341_text_attr_t fontSend2;

freeRTOS的线程定义如下

/* USER CODE END Header_startScreenFill */
void startScreenFill(void const * argument)
{
/* USER CODE BEGIN startScreenFill */
/* Infinite loop */
for(;;)
{
ili9341_fill_screen(screenReturn(),ILI9341_BLUE);
osDelay(500);
}
/* USER CODE END startScreenFill */
}
  • 注意不同的线程要区分优先级,如图
  • image-20211217220230058

文中没有提到的按照上一篇博客的操作

效果如图

20211217220332