国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【STM32】使用CubeMX快速創(chuàng)建FreeRTOS的基礎(chǔ)工程,基于正點(diǎn)原子

這篇具有很好參考價(jià)值的文章主要介紹了【STM32】使用CubeMX快速創(chuàng)建FreeRTOS的基礎(chǔ)工程,基于正點(diǎn)原子。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

系列文章目錄

【STM32】HAL庫(kù) 新建MDK工程

【STM32】HAL庫(kù) 串口輪詢發(fā)送

【STM32】HAL庫(kù) LED閃爍、流水燈

【STM32】HAL庫(kù) 定時(shí)器中斷

【STM32】HAL庫(kù) 外部中斷


前言

使用STM32F103C8T6開(kāi)發(fā)板,用STM32CubeMX配置FreeRTOS,可以適配正點(diǎn)原子FreeRTOS所有實(shí)驗(yàn)的基礎(chǔ)工程

一、STM32CubeMX設(shè)置

選擇芯片

stm32cubemx freertos,stm32,嵌入式硬件,單片機(jī)
stm32cubemx freertos,stm32,嵌入式硬件,單片機(jī)

配置系統(tǒng)時(shí)鐘

stm32cubemx freertos,stm32,嵌入式硬件,單片機(jī)
stm32cubemx freertos,stm32,嵌入式硬件,單片機(jī)

HAL的時(shí)基不能選擇系統(tǒng)定時(shí)器
stm32cubemx freertos,stm32,嵌入式硬件,單片機(jī)

GPIO

PA0和PA1輸出模式,驅(qū)動(dòng)兩個(gè)LED燈。
PB4、PB6和PB11輸入模式,PB1外部中斷下降沿觸發(fā),全部上拉,檢測(cè)按鍵。
stm32cubemx freertos,stm32,嵌入式硬件,單片機(jī)

定時(shí)器

定時(shí)器2和定時(shí)器3的周期設(shè)置為1秒
stm32cubemx freertos,stm32,嵌入式硬件,單片機(jī)
stm32cubemx freertos,stm32,嵌入式硬件,單片機(jī)

定時(shí)器4,設(shè)置為1000Hz的10到100倍,100倍為100000Hz。用于測(cè)任務(wù)運(yùn)行時(shí)間。
stm32cubemx freertos,stm32,嵌入式硬件,單片機(jī)

串口

用于打印信息
stm32cubemx freertos,stm32,嵌入式硬件,單片機(jī)

FreeRTOS設(shè)置

stm32cubemx freertos,stm32,嵌入式硬件,單片機(jī)

中斷

把定時(shí)器3優(yōu)先級(jí)改為6,生成工程文件后,再將定時(shí)器2優(yōu)先級(jí)改為4。
定時(shí)器1優(yōu)先級(jí)改為最高,可以在任務(wù)中使用HAL_Delay代替正點(diǎn)原子的delay_ms
stm32cubemx freertos,stm32,嵌入式硬件,單片機(jī)

設(shè)置堆空間

這款芯片的RAM空間為20k,可以設(shè)置堆空間為10k
stm32cubemx freertos,stm32,嵌入式硬件,單片機(jī)

Config parameters

stm32cubemx freertos,stm32,嵌入式硬件,單片機(jī)

Include parameters

stm32cubemx freertos,stm32,嵌入式硬件,單片機(jī)

互斥量

stm32cubemx freertos,stm32,嵌入式硬件,單片機(jī)

事件

stm32cubemx freertos,stm32,嵌入式硬件,單片機(jī)

任務(wù)

給它們?cè)O(shè)置不同的優(yōu)先級(jí)
stm32cubemx freertos,stm32,嵌入式硬件,單片機(jī)

隊(duì)列

按鍵隊(duì)列和大數(shù)據(jù)隊(duì)列
stm32cubemx freertos,stm32,嵌入式硬件,單片機(jī)

軟件定時(shí)器

單次和周期
stm32cubemx freertos,stm32,嵌入式硬件,單片機(jī)

二值信號(hào)量

stm32cubemx freertos,stm32,嵌入式硬件,單片機(jī)

計(jì)數(shù)信號(hào)量

stm32cubemx freertos,stm32,嵌入式硬件,單片機(jī)

工程設(shè)置

stm32cubemx freertos,stm32,嵌入式硬件,單片機(jī)
stm32cubemx freertos,stm32,嵌入式硬件,單片機(jī)

二、代碼

LED閃爍

void LED0_TOGGLE(void)
{
	HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_0);
}
void LED1_TOGGLE(void)
{
	HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_1);
}
void task1(void *argument)
{
  /* USER CODE BEGIN task1 */
  /* Infinite loop */
  for(;;)
  {
		LED0_TOGGLE();
    	osDelay(500); 
  }
  /* USER CODE END task1 */
}
void task2(void *argument)
{
  /* USER CODE BEGIN task2 */
  /* Infinite loop */
  for(;;)
  {
		LED1_TOGGLE();
    	osDelay(500); 
  }
  /* USER CODE END task2 */
}

串口

stm32cubemx freertos,stm32,嵌入式硬件,單片機(jī)

#include <stdio.h>

int fputc(int ch, FILE  *f)
{
	HAL_UART_Transmit(&huart1, (uint8_t*)&ch ,1,1000);
	return (ch);
}
void task1(void *argument)
{
  /* USER CODE BEGIN task1 */
  /* Infinite loop */
	 uint32_t task1_num = 0;
  for(;;)
  {
	printf("task1_num:%d\r\n",++task1_num);
	LED0_TOGGLE();
    osDelay(500);
  }
  /* USER CODE END task1 */
}
void task2(void *argument)
{
  /* USER CODE BEGIN task2 */
  /* Infinite loop */
    uint32_t task2_num = 0;
  for(;;)
  {
	printf("task2_num:%d\r\n",++task2_num);
	LED1_TOGGLE();
    osDelay(500);  
	}
  /* USER CODE END task2 */
}

按鍵掃描

uint8_t key_scan(uint8_t mode);  

#define KEY0        HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_4)     
#define KEY1        HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_6)     
#define KEY2        HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1)     
#define WK_UP       HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_11)     

#define KEY0_PRES    1             
#define KEY1_PRES    2             
#define KEY2_PRES    3             
#define WKUP_PRES    4    

uint8_t key_scan(uint8_t mode)
{
    static uint8_t key_up = 1; 
    uint8_t keyval = 0;

    if (mode) key_up = 1;      

    if (key_up && (KEY0 == 0 || KEY1 == 0 || KEY2 == 0 || WK_UP == 0))  
    {
        HAL_Delay (10);           
        key_up = 0;

        if (KEY0 == 0)  keyval = KEY0_PRES;

        if (KEY1 == 0)  keyval = KEY1_PRES;

        if (KEY2 == 0)  keyval = KEY2_PRES;

        if (WK_UP == 0) keyval = WKUP_PRES;
    }
    else if (KEY0 == 1 && KEY1 == 1 && KEY2 == 1 && WK_UP == 1)        
    {
        key_up = 1;
    }

    return keyval;              
}
void task3(void *argument)
{
  /* USER CODE BEGIN task3 */
  /* Infinite loop */
  uint8_t key = 0;
  for(;;)
  {
		key = key_scan(0);
		if(key) printf("key = %d\r\n",key);
		osDelay(10);
  }
  /* USER CODE END task3 */
}

定時(shí)器

修改定時(shí)器2的優(yōu)先級(jí)

   HAL_NVIC_SetPriority(TIM2_IRQn, 4, 0);

打開(kāi)定時(shí)器中斷

	HAL_TIM_Base_Start_IT(&htim2);
	HAL_TIM_Base_Start_IT(&htim3);

定時(shí)器回調(diào)函數(shù),打印定時(shí)器的優(yōu)先級(jí)

uint32_t FreeRTOSRunTimeTicks;

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
  /* USER CODE BEGIN Callback 0 */
  uint32_t preemptPriority, subPriority;
  /* USER CODE END Callback 0 */
  if (htim->Instance == TIM1) {
    HAL_IncTick();
  }
  /* USER CODE BEGIN Callback 1 */
  if (htim->Instance == TIM2) {
		HAL_NVIC_GetPriority(TIM2_IRQn, NVIC_PRIORITYGROUP_4, &preemptPriority, &subPriority);
		printf("TIM2_Priority:%d\r\n",preemptPriority);
  }
  if (htim->Instance == TIM3) {
		HAL_NVIC_GetPriority(TIM3_IRQn, NVIC_PRIORITYGROUP_4, &preemptPriority, &subPriority);
		printf("TIM3_Priority:%d\r\n",preemptPriority);
  }  
	if (htim->Instance == TIM4) {
	FreeRTOSRunTimeTicks++;
  }
  /* USER CODE END Callback 1 */
}

開(kāi)啟定時(shí)器4,用于任務(wù)運(yùn)行時(shí)間統(tǒng)計(jì)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-825183.html

void configureTimerForRunTimeStats(void)
{
	HAL_TIM_Base_Start_IT(&htim4);
}

unsigned long getRunTimeCounterValue(void)
{
	return FreeRTOSRunTimeTicks;
}

FreeRTOSConfig.h

#define configUSE_QUEUE_SETS                            1                       /* 1: 使能隊(duì)列集, 默認(rèn): 0 */

到了這里,關(guān)于【STM32】使用CubeMX快速創(chuàng)建FreeRTOS的基礎(chǔ)工程,基于正點(diǎn)原子的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • STM32 CubeMX (第四步Freertos內(nèi)存管理和CPU使用率)

    STM32 CubeMX (第四步Freertos內(nèi)存管理和CPU使用率)

    學(xué)習(xí)使用Freertos第四步 在 FreeRTOS 中,中斷管理和軟件定時(shí): · taskENTER_CRITICAL() ·; 是一個(gè)函數(shù)在 FreeRTOS 中使用的,用于進(jìn)入臨界區(qū)(critical section)。在臨界區(qū)內(nèi),中斷會(huì)被禁用,這樣可以確保在多任務(wù)環(huán)境下共享資源的安全性。你可以在需要保護(hù)共享資源的代碼段中使用 ·

    2024年02月12日
    瀏覽(24)
  • STM32使用STM32CUBEMX配置FreeRTOS+SDIO4bit+FATFS注意事項(xiàng)

    STM32使用STM32CUBEMX配置FreeRTOS+SDIO4bit+FATFS注意事項(xiàng)

    以STM32F429為例: 1、SDIO配置 配置為4bit模式,此配置不是最終配置,后面會(huì)在代碼進(jìn)行修改。 2、Fatfs配置 Set Defines 選項(xiàng)中的配置可以默認(rèn),最重要注意Advanced Setting 選擇中的配置,如下 該界面配置默認(rèn)Use dma template是默認(rèn)使能的 ,并且不可以選擇,只能選擇使能,所以需要使

    2024年02月11日
    瀏覽(31)
  • STM32 CubeMX LwIP + freertOS 移植

    STM32 CubeMX LwIP + freertOS 移植

    開(kāi)發(fā)板: 官方 STM32F746? MCU型號(hào):STM32F746NGH 網(wǎng)卡型號(hào):LAN8742A? 原理圖如下 先用裸機(jī)測(cè)試LAN8742A的網(wǎng)卡驅(qū)動(dòng) 使用CubeMX創(chuàng)建工程 系統(tǒng)時(shí)鐘和時(shí)基定時(shí)器如下 無(wú)系統(tǒng)LWIP協(xié)議棧設(shè)置,靜態(tài)IP地址,關(guān)閉DHCP 生產(chǎn)代碼,下載進(jìn)開(kāi)發(fā)板。開(kāi)發(fā)板網(wǎng)口與電腦網(wǎng)口通過(guò)網(wǎng)線直連,設(shè)置電腦本

    2024年01月16日
    瀏覽(32)
  • 搭建STM32F407的Freertos系統(tǒng)(基于STM32CubeMX)

    搭建STM32F407的Freertos系統(tǒng)(基于STM32CubeMX)

    ? ? ? ?本人長(zhǎng)期開(kāi)發(fā)Linux、Windows上應(yīng)用軟件,一直以來(lái)MCU開(kāi)發(fā)有所接觸,但較少(最近項(xiàng)目需要,小公司么,都得會(huì),被逼的),好在有STM32CubeMX這樣工具,貌似就是我想要的工具。 ? ? ? ? 本次demo目標(biāo)立下: ? ? ? ? 1. 搭建或移植FreeRTOS到STM32上,畢竟對(duì)于長(zhǎng)期在Linux環(huán)境

    2024年02月10日
    瀏覽(31)
  • 使用STM32CubeMX創(chuàng)建STM32工程(串口,硬件IIC配置)

    使用STM32CubeMX創(chuàng)建STM32工程(串口,硬件IIC配置)

    提示:文章寫(xiě)完后,目錄可以自動(dòng)生成,如何生成可參考右邊的幫助文檔 最近教研室的項(xiàng)目需要使用STM32做處理器,對(duì)環(huán)境數(shù)據(jù)進(jìn)行采集處理,在拿到板子后,需要根據(jù)單片機(jī)具體型號(hào)(STM32F411CEU6)創(chuàng)建工程,再進(jìn)行上層應(yīng)用的開(kāi)發(fā)。因?yàn)橐郧岸际怯玫腇1系列的開(kāi)發(fā)板,用的

    2023年04月18日
    瀏覽(23)
  • STM32cubemx對(duì)FreeRTOS的適配(工程模板配置)

    STM32cubemx對(duì)FreeRTOS的適配(工程模板配置)

    本篇文章將帶大家使用STM32cubemx對(duì)FreeRTOS進(jìn)行工程模板的配置。 1.開(kāi)始工程的創(chuàng)建: 2.芯片型號(hào)選擇: 3.修改時(shí)鐘為T(mén)IM8: 在FreeRTOS中SYSTICK需要為FreeRTOS提供心跳,故這里選擇TIM8替換SYNTICK。 4.配置RCC: 5.配置FreeRTOS: 6.開(kāi)啟串口方便調(diào)試和觀察: 7.工程路徑及編譯器選擇等:

    2024年02月07日
    瀏覽(25)
  • 【STM32】利用CubeMX對(duì)FreeRTOS用按鍵控制任務(wù)

    【STM32】利用CubeMX對(duì)FreeRTOS用按鍵控制任務(wù)

    對(duì)于FreeRTOS中的操作,最常用的就是創(chuàng)建、刪除、暫停和恢復(fù)任務(wù)。 此次實(shí)驗(yàn)?zāi)繕?biāo): 1.創(chuàng)建任務(wù)一:LED1每間隔1秒閃爍一次,并通過(guò)串口打印 2.創(chuàng)建任務(wù)二:LED2每間隔0.5秒閃爍一次,并通過(guò)串口打印 3.創(chuàng)建任務(wù)三:通過(guò)KEY1實(shí)現(xiàn)對(duì)任務(wù)一的創(chuàng)建和刪除。 按鍵按下以后如果有任

    2024年02月13日
    瀏覽(37)
  • STM32CubeMX+FATFS+FREERTOS讀寫(xiě)U盤(pán)

    STM32CubeMX+FATFS+FREERTOS讀寫(xiě)U盤(pán)

    軟件:STM32CubeMX V6.6.1 、 KEIL5 V5.29 硬件:STM32F429ZET6 USB_OTG_FS:PA11/PA12引腳 USART1:PA9/PA10,方便輸出調(diào)試信息 1)SYS下載方式選擇SW方式,因?yàn)橐褂肍REERTOS,提前將時(shí)鐘源修改為T(mén)IM7(其他定時(shí)器也可以) 2) RCC設(shè)置,選擇高速外部晶振HSE(根據(jù)具體硬件選擇) 3)USART1設(shè)置,方便輸出調(diào)

    2024年01月18日
    瀏覽(35)
  • STM32基于HAL庫(kù)和STM32CubeMX的實(shí)時(shí)操作系統(tǒng)FreeRtOS開(kāi)發(fā)

    STM32基于HAL庫(kù)和STM32CubeMX的實(shí)時(shí)操作系統(tǒng)FreeRtOS開(kāi)發(fā)

    1、FreeRTOS RTOS是一類操作系統(tǒng),μC/OS,F(xiàn)reeRTOS,RTX,RT-Thread 等這些都是RTOS 類的操作系統(tǒng) FreeRTOS 是眾多RTOS 類操作系統(tǒng)中的一種,F(xiàn)reeRTOS 十分的小巧,可以在資源有限的微控制器中運(yùn)行,F(xiàn)reeRTOS 也不僅僅局限于在微控制器中使用。就單從文件數(shù)量上來(lái)看FreeRTOS 要比μC/OS 少得多

    2024年02月21日
    瀏覽(19)
  • STM32 CubeMX (第三步Freertos中斷管理和軟件定時(shí))

    STM32 CubeMX (第三步Freertos中斷管理和軟件定時(shí))

    學(xué)習(xí)使用Freertos第三步 在 FreeRTOS 中,中斷管理和軟件定時(shí): · taskENTER_CRITICAL() ·; 是一個(gè)函數(shù)在 FreeRTOS 中使用的,用于進(jìn)入臨界區(qū)(critical section)。在臨界區(qū)內(nèi),中斷會(huì)被禁用,這樣可以確保在多任務(wù)環(huán)境下共享資源的安全性。你可以在需要保護(hù)共享資源的代碼段中使用 ·

    2024年02月12日
    瀏覽(41)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包