STM32 +Free RTOS+LED閃爍


移植Free RTOS

由于Cubemx,在STM32中移植Free RTOS變的異常簡(jiǎn)單。只需要勾選一下,開發(fā)工具將移植的工作全部搞定。如圖所示:



由于后面時(shí)鐘存在沖突需要對(duì)時(shí)鐘修改,如下圖所示:



同時(shí)修改了時(shí)鐘配置,如下圖所示:

然后再添加兩個(gè)GPIO用于點(diǎn)亮LED,這里不再詳述。
在Free RTOS中添加任務(wù)列表。



然后可以生成MDK V5下的代碼。

代碼分析

Free RTOS 任務(wù)相關(guān)的代碼會(huì)自動(dòng)生成如下:

創(chuàng)建句柄:

osThreadId LED1Handle;
osThreadId LED2Handle;

創(chuàng)建任務(wù)函數(shù):

void StartLED1Task(void const * argument);
void StartLED2Task(void const * argument);

main函數(shù)中創(chuàng)建線程:

int main(void)
{

  /* MCU Configuration----------------------------------------------------------*/
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();
  /* Configure the system clock */
  SystemClock_Config();
  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_SPI2_Init();
  MX_USART2_UART_Init();

  /* Create the thread(s) */
  /* definition and creation of LED1 */
  osThreadDef(LED1, StartLED1Task, osPriorityNormal, 0, 128);
  LED1Handle = osThreadCreate(osThread(LED1), NULL);

  /* definition and creation of LED2 */
  osThreadDef(LED2, StartLED2Task, osPriorityIdle, 0, 128);
  LED2Handle = osThreadCreate(osThread(LED2), NULL);

  /* Start scheduler */
  osKernelStart();
  
  /* We should never get here as control is now taken by the scheduler */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {

}

創(chuàng)建自己的任務(wù)函數(shù):

/* StartLED1Task function */
void StartLED1Task(void const * argument)
{

  /* USER CODE BEGIN 5 */
  /* Infinite loop */
  for(;;)
  {
        HAL_GPIO_WritePin(GPIOB, LED0_Pin, 0);
    osDelay(1000);
        HAL_GPIO_WritePin(GPIOB, LED0_Pin, 1);
        osDelay(1000);
  }
  /* USER CODE END 5 */ 
}

/* StartLED2Task function */
void StartLED2Task(void const * argument)
{
  /* USER CODE BEGIN StartLED2Task */
  /* Infinite loop */
  for(;;)
  {
        HAL_GPIO_WritePin(GPIOB, LED1_Pin, 0);
    osDelay(100);
        HAL_GPIO_WritePin(GPIOB, LED1_Pin, 1);
        osDelay(100);
  }
  /* USER CODE END StartLED2Task */
}

最終能夠?qū)崿F(xiàn)LED燈的交替顯示。
調(diào)試中的問題:

1、關(guān)于創(chuàng)建任務(wù)函數(shù)xTaskCreate()和osThreadDef()的區(qū)別:
xTaskCreate()是FreeRTOS的原始API函數(shù)。
osThreadDef()ARM搞的CMIS-RTOS V1封裝層,對(duì)FreeRTOS的API函數(shù)進(jìn)行封裝。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 峭立姐姐閱讀 170評(píng)論 0 0
  • 又是一個(gè)聒噪的夏天 如火烈日掛在天邊 以為吻過就能永遠(yuǎn) 永遠(yuǎn)卻似你消失不見 我聽過冬日響雷 我見過暑天飛雪 我看過...
    暮雨MuYu閱讀 444評(píng)論 6 12
  • 老公最近要考試,所以必須看書,可我發(fā)覺他玩的時(shí)間比看書多多了。昨天上午,他發(fā)誓窩在房間看書,決不出門。我怕打擾他,...
    霜憶閱讀 800評(píng)論 0 2

友情鏈接更多精彩內(nèi)容