首頁(yè) > 評(píng)測(cè) > 【NUCLEO-U5A5ZJ-Q測(cè)評(píng)】用ThreadX點(diǎn)個(gè)燈

【NUCLEO-U5A5ZJ-Q測(cè)評(píng)】用ThreadX點(diǎn)個(gè)燈

  
  • 作者:
  • 來源:
  • [導(dǎo)讀]
  • 1、STM32U5A5系列芯片是STMicroelectronics推出的一款超低功耗微控制器系列,基于高性能Arm Cortex-M33 32位RISC內(nèi)核,最高工作頻率為160MHz。該系列芯片具有以下特點(diǎn): 高性能:Cortex-M33內(nèi)核具有單精度FPU(浮點(diǎn)
1、STM32U5A5系列芯片是STMicroelectronics推出的一款超低功耗微控制器系列,基于高性能Arm Cortex-M33 32位RISC內(nèi)核,最高工作頻率為160MHz。該系列芯片具有以下特點(diǎn):
高性能:Cortex-M33內(nèi)核具有單精度FPU(浮點(diǎn)單元),支持所有Arm單精度數(shù)據(jù)處理指令和所有數(shù)據(jù)類型,還實(shí)現(xiàn)了完整的DSP(數(shù)字信號(hào)處理)指令集和MPU(內(nèi)存保護(hù)單元),可增強(qiáng)應(yīng)用安全性。
大容量存儲(chǔ)器:該系列芯片嵌入高速存儲(chǔ)器(4Mbytes Flash 和2.5Mbytes SRAM),可滿足各種應(yīng)用需求。STM32U5A5是STM32 系列中首款提供 4 MB Flash 的 MCU,64 至 169 引腳封裝都支持。
豐富的通信接口:該系列芯片提供豐富的通信接口,包括6個(gè)I2C、3個(gè)SPI、4個(gè)USART、2個(gè)UART、1個(gè)低功耗UART、2個(gè)SAI、1個(gè)DCMI(數(shù)碼相機(jī)接口)、2個(gè)SDMMC、1個(gè)FDCAN、1個(gè)USB OTG高速、1個(gè)USB Type-C/USB Power Delivery控制器和1個(gè)通用同步8-/16位PSSI(并行數(shù)據(jù)輸入/輸出從屬接口)。特別是高速的USB接口省掉了外接高速USB  PHY的麻煩。
廣泛的應(yīng)用領(lǐng)域:該系列芯片可廣泛應(yīng)用于工業(yè)控制、物聯(lián)網(wǎng)、消費(fèi)電子、醫(yī)療保健等領(lǐng)域。
芯片的內(nèi)核和外設(shè)簡(jiǎn)圖如下


2、開發(fā)板 Nucleo-U5A5ZI-Q 基于 144引腳通用Nucleo標(biāo)準(zhǔn)設(shè)計(jì),采用 STM32U5 微控制器,提供了一種靈活且經(jīng)濟(jì)的方式來試驗(yàn)新概念和構(gòu)建原型。通過 STM32U5 微控制器提供的各種性能和功耗特性組合,用戶可以選擇滿足自己需求的解決方案。
通過 ST Zio 連接器(兼容 Arduino Uno V3)和 ST morpho 接頭,可以方便地?cái)U(kuò)展開發(fā)板的功能,連接各種定制的擴(kuò)展板。集成了 STLINK-V3E 調(diào)試/編程器,不需要額外的調(diào)試器。

功能詳細(xì)框圖如下:

3、點(diǎn)個(gè)燈

下面用ThreadX點(diǎn)個(gè)燈。再最新的系列芯片,ST將RTOS和USB協(xié)議棧都轉(zhuǎn)向了ThreadX和USBX.
Azure RTOS ThreadX 是 Microsoft 提供的高級(jí)工業(yè)級(jí)實(shí)時(shí)操作系統(tǒng) (RTOS)。 它是專門為深度嵌入式實(shí)時(shí) IoT 應(yīng)用程序設(shè)計(jì)的。 Azure RTOS ThreadX 提供高級(jí)計(jì)劃、通信、同步、計(jì)時(shí)器、內(nèi)存管理和中斷管理功能。 此外,Azure RTOS ThreadX 具有許多高級(jí)功能,包括 picokernel 體系結(jié)構(gòu)、preemption-threshold 計(jì)劃、event-chaining、執(zhí)行分析、性能指標(biāo)和系統(tǒng)事件跟蹤。 Azure RTOS ThreadX 非常易于使用,適用于要求極其苛刻的嵌入式應(yīng)用程序。 Azure RTOS ThreadX 在各種產(chǎn)品(包括消費(fèi)者設(shè)備、醫(yī)療電子設(shè)備和工業(yè)控制設(shè)備)上的部署次數(shù)已達(dá)數(shù)十億次。Azure RTOS ThreadX 的占用空間非常小,最少只需要一個(gè) 2KB 的指令區(qū)域和 1 KB 的 RAM.
測(cè)試使用的是ST提供的ThreadX\Tx_Thread_Creation里面的例子。主要是閃爍LD1用于測(cè)試。

創(chuàng)建了3個(gè)任務(wù):"Main Thread"、"Thread One"、"Thread Two" 。任務(wù)
"Thread One"  - LED_GREEN toggles every 500ms for 5 seconds

"Thread Two"  - LED_GREEN toggles every 200ms for 5 seconds

"Main Thread"  - Success status (After 3 times) :  'LED_GREEN' toggles every 1 second for ever.

任務(wù)1、2比較簡(jiǎn)單就是閃爍LED
  1. void ThreadOne_Entry(ULONG thread_input)
  2. {
  3.   (void) thread_input;
  4.   uint8_t count = 0;
  5.   /* Infinite loop */
  6.   while(1)
  7.   {
  8.     HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
  9.     /* Delay for 500ms (App_Delay is used to avoid context change). */
  10.     App_Delay(50);
  11.     count ++;
  12.     if (count == 10)
  13.     {
  14.       count = 0;
  15.       if (tx_event_flags_set(&EventFlag, THREAD_ONE_EVT, TX_OR) != TX_SUCCESS)
  16.       {
  17.         Error_Handler();
  18.       }
  19.     }
  20.   }
  21. }
復(fù)制代碼
當(dāng)"Thread One"、"Thread Two"完成之后,"Main Thread"將會(huì)刪除這2個(gè)任務(wù)。然后將用戶的綠燈1秒閃爍一次。
  1. void MainThread_Entry(ULONG thread_input)
  2. {
  3.   /* USER CODE BEGIN MainThread_Entry */
  4.   UINT old_prio = 0;
  5.   UINT old_pre_threshold = 0;
  6.   ULONG   actual_flags = 0;
  7.   uint8_t count = 0;
  8.   (void) thread_input;

  9.   while (count < 3)
  10.   {
  11.     count++;
  12.     if (tx_event_flags_get(&EventFlag, THREAD_ONE_EVT, TX_OR_CLEAR,
  13.                            &actual_flags, TX_WAIT_FOREVER) != TX_SUCCESS)
  14.     {
  15.       Error_Handler();
  16.     }
  17.     else
  18.     {
  19.       /* Update the priority and preemption threshold of ThreadTwo
  20.       to allow the preemption of ThreadOne */
  21.       tx_thread_priority_change(&ThreadTwo, NEW_THREAD_TWO_PRIO, &old_prio);
  22.       x_thread_preemption_change(&ThreadTwo, NEW_THREAD_TWO_PREEMPTION_THRESHOLD, &old_pre_threshold);

  23.       if (tx_event_flags_get(&EventFlag, THREAD_TWO_EVT, TX_OR_CLEAR,
  24.                              &actual_flags, TX_WAIT_FOREVER) != TX_SUCCESS)
  25.       {
  26.         Error_Handler();
  27.       }
  28.       else
  29.       {
  30.         /* Reset the priority and preemption threshold of ThreadTwo */
  31.         tx_thread_priority_change(&ThreadTwo, THREAD_TWO_PRIO, &old_prio);
  32.         tx_thread_preemption_change(&ThreadTwo, THREAD_TWO_PREEMPTION_THRESHOLD, &old_pre_threshold);
  33.       }
  34.     }
  35.   }

  36.   /* Destroy ThreadOne and ThreadTwo */
  37.   tx_thread_terminate(&ThreadOne);
  38.   tx_thread_terminate(&ThreadTwo);

  39.   /* Infinite loop */
  40.   while(1)
  41.   {
  42.     HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
  43.     /* Thread sleep for 1s */
  44.     tx_thread_sleep(100);
  45.   }
  46.   /* USER CODE END MainThread_Entry */
  47. }
復(fù)制代碼
STM32可以免費(fèi)使用ThreadX全家桶之后,ST的芯片已經(jīng)基本放棄了freertos。因?yàn)榘宋募到y(tǒng),網(wǎng)絡(luò)協(xié)議,USB協(xié)議棧等,所以ThreadX全家桶更加方便適合學(xué)習(xí)和使用。如果有其它的RTOS的基礎(chǔ),轉(zhuǎn)到ThreadX上應(yīng)該非常簡(jiǎn)單。




  • 本文系21ic原創(chuàng),未經(jīng)許可禁止轉(zhuǎn)載!

網(wǎng)友評(píng)論

  • 聯(lián)系人:巧克力娃娃
  • 郵箱:board@21ic.com
  • 我要投稿
  • 歡迎入駐,開放投稿

熱門標(biāo)簽
項(xiàng)目外包 more+