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

STM32F103RCT6 -- 基于FreeRTOS 的USART1 串口通訊

這篇具有很好參考價(jià)值的文章主要介紹了STM32F103RCT6 -- 基于FreeRTOS 的USART1 串口通訊。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1. 在STM32F103RCT6 單片機(jī)上跑FreeRTOS 實(shí)時(shí)操作系統(tǒng),使用串口USART1 通訊,發(fā)送 – 接收數(shù)據(jù),實(shí)現(xiàn)上位機(jī)與下位機(jī)的通信

使用 FreeRTOS 提供的隊(duì)列(Queue)機(jī)制來實(shí)現(xiàn)數(shù)據(jù)的接收和發(fā)送

2. USART1 配置:

TX - PA9
RX - PA10
波特率:9600
數(shù)據(jù)位:8bit
校驗(yàn)位:無(wú)
停止位:1bit

數(shù)據(jù)格式:
RX: 55 AA 06 00 06 31 02 24 01 FC 80
TX: 55 AA 06 00 06 32 01 24 01 B8 70

55 AA – 幀頭
06 - 數(shù)據(jù)字節(jié)數(shù),不包括幀頭,不包括校驗(yàn)位
00 06 – 模塊
31 02 24-- 數(shù)據(jù)方向:從上位機(jī)(安卓LCD顯示屏)到下位機(jī)(STM32)
32 01 24-- 數(shù)據(jù)方向:從下位機(jī)(STM32) 到上位機(jī)(安卓LCD顯示屏)
01 - payload 要發(fā)送的數(shù)據(jù)具體內(nèi)容
FC 80 / B8 70 – CRC 16bit 校驗(yàn)方法計(jì)算出來的,用06 00 06 31 02 24 01 使用CRC計(jì)算器可以計(jì)算出來 FC 80

CRC在線計(jì)算網(wǎng)址:

http://www.ip33.com/crc.html

3. 實(shí)現(xiàn)代碼:

#include "stm32f10x.h"
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"

#define USART1_BAUDRATE 9600
#define USART1_TX_PIN GPIO_Pin_9
#define USART1_RX_PIN GPIO_Pin_10
#define USART1_GPIO GPIOA
#define USART1_GPIO_CLK RCC_APB2Periph_GPIOA
#define USART1_CLK RCC_APB2Periph_USART1

#define MODBUS_SLAVE_ADDR 0x01

#define RX_BUF_SIZE    15
#define TX_BUF_SIZE     15

static QueueHandle_t rx_queue;
static QueueHandle_t tx_queue;
static TaskHandle_t task_handle;

void USART1_Init() {
    USART_InitTypeDef USART_InitStructure;
    GPIO_InitTypeDef GPIO_InitStructure;

    // Enable clocks
    RCC_APB2PeriphClockCmd(USART1_CLK | USART1_GPIO_CLK, ENABLE);

    // Configure USART1 pins
    GPIO_InitStructure.GPIO_Pin = USART1_TX_PIN | USART1_RX_PIN;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(USART1_GPIO, &GPIO_InitStructure);

    // Configure USART1
    USART_InitStructure.USART_BaudRate = USART1_BAUDRATE;
    USART_InitStructure.USART_WordLength = USART_WordLength_8b;
    USART_InitStructure.USART_StopBits = USART_StopBits_1;
    USART_InitStructure.USART_Parity = USART_Parity_No;
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
    USART_Init(USART1, &USART_InitStructure);

    // Enable USART1 interrupts
    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);

    // Enable USART1
    USART_Cmd(USART1, ENABLE);

    // Initialize queues
    rx_queue = xQueueCreate(RX_BUF_SIZE, sizeof(uint8_t));
    tx_queue = xQueueCreate(TX_BUF_SIZE, sizeof(uint8_t));

    // Create task for handling USART1 data
    xTaskCreate(USART1_Task, "USART1 Task", 1024, NULL, 1, &task_handle);
}

void USART1_Task(void *pvParameters) {
    while (1) {
        // Wait for data to be received
        uint8_t data;
        while (xQueueReceive(rx_queue, &data, portMAX_DELAY) == pdFALSE);

        // Process received data here
        // ...

        // Send response data
        uint8_t resp_data[] = {MODBUS_SLAVE_ADDR, /* response data */};
        uint16_t resp_len = sizeof(resp_data) / sizeof(uint8_t);
        xQueueSend(tx_queue, resp_data, resp_len * sizeof(uint8_t));
    }
}

void USART1_IRQHandler(void) {
    portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;

    if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) {
        uint8_t data = USART_ReceiveData(USART1);
        xQueueSendFromISR(rx_queue, &data, &xHigherPriorityTaskWoken);
    }

    if (USART_GetITStatus(USART1, USART_IT_TXE) != RESET) {
        uint8_t data;
        if (xQueueReceiveFromISR(tx_queue, &data, &xHigherPriorityTaskWoken) == pdTRUE) {
            USART_SendData(USART1, data);
        } else {
            USART_ITConfig(USART1, USART_IT_TXE, DISABLE);
        }
    }

    portEND_SWITCHING_ISR(xHigherPriorityTaskWoken);
}

int main(void) {
    // Initialize USART1
    USART1_Init();

    // Start the scheduler
    vTaskStartScheduler();
}

在代碼中,首先使用 USART1_Init 函數(shù)初始化 USART1,并使用 FreeRTOS 提供的 xQueueCreate 函數(shù)創(chuàng)建兩個(gè)隊(duì)列,一個(gè)用于接收數(shù)據(jù),一個(gè)用于發(fā)送數(shù)據(jù)。然后使用 xTaskCreate 函數(shù)創(chuàng)建一個(gè)任務(wù)(USART1_Task),用于處理 USART1 數(shù)據(jù)。在任務(wù)中,使用 xQueueReceive 函數(shù)不斷等待接收數(shù)據(jù),并使用 xQueueSend 函數(shù)發(fā)送響應(yīng)數(shù)據(jù)。在 USART1_IRQHandler 中,使用 xQueueSendFromISR 和 xQueueReceiveFromISR 函數(shù)將接收到的數(shù)據(jù)和需要發(fā)送的數(shù)據(jù)加入相應(yīng)的隊(duì)列中,并啟用或禁用 USART1 的 TXE 中斷來控制數(shù)據(jù)的發(fā)送。

需要注意的是,在任務(wù)和中斷中使用的隊(duì)列必須定義為全局變量,以避免在棧上分配空間時(shí)出現(xiàn)問題。另外,由于 FreeRTOS 使用了搶占式調(diào)度方式,因此在任務(wù)和中斷中使用的隊(duì)列必須具有線程安全性,否則可能會(huì)導(dǎo)致數(shù)據(jù)丟失或者死鎖等問題。

其中:

1.

portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;

portBASE_TYPE 是 FreeRTOS 中定義的一個(gè)數(shù)據(jù)類型,用于表示任務(wù)調(diào)度器是否需要進(jìn)行任務(wù)切換。在 FreeRTOS 中,任務(wù)調(diào)度器采用搶占式策略來決定下一次執(zhí)行哪個(gè)任務(wù)。當(dāng)某個(gè)任務(wù)需要讓出 CPU 時(shí)間時(shí),會(huì)向任務(wù)調(diào)度器發(fā)送一個(gè)任務(wù)切換請(qǐng)求,請(qǐng)求調(diào)度器立即切換到較高優(yōu)先級(jí)的任務(wù)。

在 ISR 中使用 portBASE_TYPE 變量是為了確保中斷服務(wù)程序能夠安全地與任務(wù)調(diào)度器進(jìn)行交互,以避免數(shù)據(jù)競(jìng)爭(zhēng)和死鎖等問題。在 ISR 中聲明和初始化一個(gè)名為 xHigherPriorityTaskWoken 的變量,用于指示是否需要通知任務(wù)調(diào)度器進(jìn)行任務(wù)切換。如果變量被設(shè)置為 pdTRUE,則表明當(dāng)前中斷服務(wù)程序結(jié)束后需要調(diào)用 portEND_SWITCHING_ISR 函數(shù)以切換到更高優(yōu)先級(jí)的任務(wù);如果變量被設(shè)置為 pdFALSE,則表明系統(tǒng)無(wú)需進(jìn)行任務(wù)切換,可以繼續(xù)執(zhí)行當(dāng)前任務(wù)。

當(dāng)在 ISR 中完成隊(duì)列操作或其他可能導(dǎo)致任務(wù)切換的操作時(shí),應(yīng)該及時(shí)更新 xHigherPriorityTaskWoken 變量的值,以確保任務(wù)調(diào)度器能夠及時(shí)響應(yīng)任務(wù)切換請(qǐng)求。同時(shí),在結(jié)束 ISR 之前,也應(yīng)該調(diào)用 portEND_SWITCHING_ISR 函數(shù)來通知任務(wù)調(diào)度器進(jìn)行任務(wù)切換,以確保多任務(wù)處理的正確性和穩(wěn)定性。

2.

 if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) {
        uint8_t data = USART_ReceiveData(USART1);
        xQueueSendFromISR(rx_queue, &data, &xHigherPriorityTaskWoken);
    }

這段代碼是在 USART1 的中斷服務(wù)程序(IRQHandler)中處理 USART1 的接收中斷(USART_IT_RXNE)的。

當(dāng) USART1 接收到新的數(shù)據(jù)時(shí),會(huì)觸發(fā) USART1 的接收中斷。在中斷服務(wù)程序中,我們首先檢查 RXNE(RX not empty)標(biāo)志位是否被置位,如果被置位,則表明有新的數(shù)據(jù)已經(jīng)接收到了。接著,我們調(diào)用 USART_ReceiveData 函數(shù)從數(shù)據(jù)緩沖區(qū)寄存器中讀取一個(gè)字節(jié)的數(shù)據(jù),并將其放入接收隊(duì)列(rx_queue)中。

需要注意的是,在中斷服務(wù)程序中,我們需要使用 xQueueSendFromISR 函數(shù)來往隊(duì)列中發(fā)送數(shù)據(jù),而不能使用常規(guī)的 xQueueSend 函數(shù)。這是因?yàn)樵谥袛喾?wù)程序中調(diào)用隊(duì)列操作函數(shù)時(shí),需要確保線程安全性,以避免數(shù)據(jù)競(jìng)爭(zhēng)和死鎖等問題。同時(shí),我們還需聲明和初始化一個(gè)名為 xHigherPriorityTaskWoken 的變量,用來指示是否需要在中斷服務(wù)程序結(jié)束后調(diào)用 portEND_SWITCHING_ISR 函數(shù)以切換到更高優(yōu)先級(jí)的任務(wù)。

總之,這段代碼用于在 USART1 中斷服務(wù)程序中處理接收中斷,其中涉及到了隊(duì)列和線程安全相關(guān)的知識(shí)點(diǎn)。

3.

 if (USART_GetITStatus(USART1, USART_IT_TXE) != RESET) {
        uint8_t data;
        if (xQueueReceiveFromISR(tx_queue, &data, &xHigherPriorityTaskWoken) == pdTRUE) {
            USART_SendData(USART1, data);
        } else {
            USART_ITConfig(USART1, USART_IT_TXE, DISABLE);
        }
    }

這段代碼是在 USART1 的中斷服務(wù)程序(IRQHandler)中處理 USART1 的發(fā)送中斷(USART_IT_TXE)的。

當(dāng) USART1 發(fā)送數(shù)據(jù)緩沖區(qū)寄存器空(TXE=1)時(shí),會(huì)觸發(fā) USART1 的發(fā)送中斷。在中斷服務(wù)程序中,我們首先檢查 TXE 標(biāo)志位是否被設(shè)置,如果被設(shè)置,則表明數(shù)據(jù)緩沖區(qū)寄存器已經(jīng)準(zhǔn)備好接受新的數(shù)據(jù)進(jìn)行發(fā)送。

接著,我們嘗試從發(fā)送隊(duì)列(tx_queue)中取出一個(gè)字節(jié)的數(shù)據(jù),并使用 USART_SendData 函數(shù)將其發(fā)送出去。如果隊(duì)列中沒有數(shù)據(jù)需要發(fā)送,則需要禁用 USART1 的 TXE 中斷,以避免不必要的中斷響應(yīng)。

需要注意的是,在中斷服務(wù)程序中,我們需要使用 xQueueReceiveFromISR 函數(shù)來從隊(duì)列中獲取數(shù)據(jù),而不能使用常規(guī)的 xQueueReceive 函數(shù)。這是因?yàn)樵谥袛喾?wù)程序中調(diào)用隊(duì)列操作函數(shù)時(shí),需要確保線程安全性,以避免數(shù)據(jù)競(jìng)爭(zhēng)和死鎖等問題。同時(shí),我們還需聲明和初始化一個(gè)名為 xHigherPriorityTaskWoken 的變量,用來指示是否需要在中斷服務(wù)程序結(jié)束后調(diào)用 portEND_SWITCHING_ISR 函數(shù)以切換到更高優(yōu)先級(jí)的任務(wù)。

總之,這段代碼用于在 USART1 中斷服務(wù)程序中處理發(fā)送中斷,其中涉及到了隊(duì)列和線程安全相關(guān)的知識(shí)點(diǎn)。

4.

portEND_SWITCHING_ISR(xHigherPriorityTaskWoken);

portEND_SWITCHING_ISR 是 FreeRTOS 提供的一個(gè)函數(shù),用于結(jié)束 ISR 并檢測(cè)是否需要任務(wù)切換。在中斷服務(wù)程序結(jié)束時(shí),我們需要根據(jù)變量 xHigherPriorityTaskWoken 的值來決定是否進(jìn)行任務(wù)切換。

如果 xHigherPriorityTaskWoken 被設(shè)置為 pdTRUE,則表明當(dāng)前中斷服務(wù)程序結(jié)束后需要調(diào)用 portEND_SWITCHING_ISR 函數(shù)以切換到更高優(yōu)先級(jí)的任務(wù);如果 xHigherPriorityTaskWoken 被設(shè)置為 pdFALSE,則表明系統(tǒng)無(wú)需進(jìn)行任務(wù)切換,可以繼續(xù)執(zhí)行當(dāng)前任務(wù)。

當(dāng)需要進(jìn)行任務(wù)切換時(shí),我們調(diào)用 portEND_SWITCHING_ISR 函數(shù)將控制權(quán)交回給任務(wù)調(diào)度器,并讓調(diào)度器立即執(zhí)行高優(yōu)先級(jí)任務(wù)。具體來說,portEND_SWITCHING_ISR 函數(shù)會(huì)使用 pendSV 任務(wù)向處理器發(fā)送一個(gè)軟件中斷信號(hào),觸發(fā)任務(wù)切換流程。在此過程中,調(diào)度器會(huì)檢查所有任務(wù)的狀態(tài),并根據(jù)任務(wù)的優(yōu)先級(jí)、時(shí)間片和阻塞狀態(tài)等因素來決定下一次執(zhí)行哪個(gè)任務(wù)。

總之,portEND_SWITCHING_ISR 函數(shù)是在中斷服務(wù)程序中用于結(jié)束 ISR 并檢測(cè)是否需要任務(wù)切換的重要函數(shù)。它可以確保所有任務(wù)得到合理的調(diào)度和執(zhí)行,從而實(shí)現(xiàn)高效、穩(wěn)定和可靠的多任務(wù)處理。文章來源地址http://www.zghlxwxcb.cn/news/detail-605266.html

到了這里,關(guān)于STM32F103RCT6 -- 基于FreeRTOS 的USART1 串口通訊的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(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)文章

  • 基于STM32F103RCT6之手把手教你寫智能家居項(xiàng)目(2)

    基于STM32F103RCT6之手把手教你寫智能家居項(xiàng)目(2)

    ??????? 上一節(jié)我們簡(jiǎn)述了智能家居項(xiàng)目,實(shí)現(xiàn)了點(diǎn)燈的相關(guān)代碼編寫,還有WIFI模塊的固件燒錄。 連接什么平臺(tái): ??????? 我們想要遠(yuǎn)程控制家具的開關(guān)和獲取家中的狀態(tài),少不了一個(gè)可以傳輸數(shù)據(jù)的云平臺(tái)。我認(rèn)為易監(jiān)控是一個(gè)簡(jiǎn)單好用的云平臺(tái)。 怎么連接平臺(tái):

    2024年02月20日
    瀏覽(909)
  • stm32f103rct6引腳功能表格

    腳號(hào) 引腳名稱 主功能 默認(rèn)復(fù)用 重定義 備注 1?????????? ? VBAT VBAT -- -- 說明1 2?????????? ? PC13-TAMPER-RTC PC13 TAMPER-RTC -- 說明3 3?????????? ? PC14-OSC32_IN PC14 OSC32_IN -- 說明3 4?????????? ? PC15-OSC32_OUT PC15 OSC32_OUT -- 說明3 5?????????? ? OSC_IN OSC_IN -- CAN_RX 晶振

    2024年02月06日
    瀏覽(34)
  • STM32F103RCT6——定時(shí)器簡(jiǎn)單用法

    STM32F103RCT6——定時(shí)器簡(jiǎn)單用法

    STM32F10xx參考手冊(cè)英文和中文版 百度網(wǎng)盤:https://pan.baidu.com/s/1Z2nB0WVJIxvm3VOI9MQiiw 提取碼:lxlx STM32F103RCT6數(shù)據(jù)手冊(cè) 鏈接:https://pan.baidu.com/s/1tRchgf-5C1MN4W58vQ9zPg 提取碼:lxlx STM32F103RCT6包括,高級(jí)控制定時(shí)器TIM1和TIM8,通用定時(shí)器TIM2-5,基本定時(shí)器TIM6和TIM7. 高級(jí)控制定時(shí)器TIM1,TI

    2024年02月08日
    瀏覽(99)
  • 從零開始制作STM32F103RCT6小車(一)

    從零開始制作STM32F103RCT6小車(一)

    ? ? ? ? 僅以此系列給實(shí)驗(yàn)室的學(xué)弟學(xué)妹作為小車制作教程來使用,后續(xù)的內(nèi)容我會(huì)在這個(gè)暑假陸續(xù)更新出來,本篇的內(nèi)容是新建一個(gè)適用于STM32F103RCT6的工程 ? ? ? ? 接下來的操作幾乎是基于STM32F1xx系列的固件庫(kù),這里我給大家列出鏈接 STM32F1xx系列固件庫(kù)? ? ? ? ? ? ? ?

    2023年04月08日
    瀏覽(108)
  • stm32f103rct6使用內(nèi)部晶振作為時(shí)鐘源

    stm32f103rct6使用內(nèi)部晶振作為時(shí)鐘源

    stm32f103rct6(庫(kù)函數(shù)版例程)使用內(nèi)部晶振8M,倍頻64M 參考 https://blog.csdn.net/oHuanCheng/article/details/105112884 http://www.openedv.com/forum.php?mod=viewthreadtid=286233 https://blog.csdn.net/ll148305879/article/details/106138302 修改system_stm32f10x.c文件中的void SystemInit(void)函數(shù) 內(nèi)部時(shí)鐘用到了FLASH,需要添加s

    2024年02月07日
    瀏覽(1209)
  • stm32F103RCT6使用FFT運(yùn)算分析波形詳解(細(xì)致教學(xué))

    stm32F103RCT6使用FFT運(yùn)算分析波形詳解(細(xì)致教學(xué))

    最近學(xué)校電賽隊(duì)伍招新,出的招新題就是低頻示波器的。之前一直沒有弄懂FFT,借著這次機(jī)會(huì)實(shí)現(xiàn)了一下,做了一個(gè)小示波器 FFT原理簡(jiǎn)述 FFT,就是快速傅里葉變換,這個(gè)操作能夠?qū)r(shí)域信號(hào)轉(zhuǎn)化成頻域信號(hào),然后對(duì)信號(hào)進(jìn)行分析 這樣說可能有點(diǎn)抽象。講細(xì)點(diǎn)就是指能夠直觀

    2024年02月14日
    瀏覽(95)
  • STM32F103RCT6電路設(shè)計(jì)及繪制方法和學(xué)習(xí)體會(huì)

    STM32F103RCT6電路設(shè)計(jì)及繪制方法和學(xué)習(xí)體會(huì)

    目錄 1電路圖各部分原理分析 1.1通信-下載板塊接口電路 1.1.1 通信模塊 1.1.2 顯示燈 1.2電源轉(zhuǎn)化電路 1.2.1 電源轉(zhuǎn)化 1.3晶振電路 1.4 OLED顯示屏接口電路 1.5 獨(dú)立按鍵電路 1.6 JTAG/SWD調(diào)試接口電路 1.7 STM32微控制器電路 1.7.1 副芯片原理 1.7.2 主芯片原理 1.8 外擴(kuò)引腳 1.9 顯示燈 2圖紙的

    2024年02月14日
    瀏覽(84)
  • STM32F103RCT6驅(qū)動(dòng)SG90舵機(jī)-完成正反轉(zhuǎn)角度控制

    STM32F103RCT6驅(qū)動(dòng)SG90舵機(jī)-完成正反轉(zhuǎn)角度控制

    SG90是一種微型舵機(jī),也被稱為伺服電機(jī)。它是一種小型、低成本的直流電機(jī),通常用于模型和機(jī)器人控制等應(yīng)用中。SG90舵機(jī)可以通過電子信號(hào)來控制其精確的位置和速度。它具有體積小、重量輕、響應(yīng)快等特點(diǎn),因此在各種小型機(jī)械設(shè)備上得到了廣泛應(yīng)用。 SG90舵機(jī)通常用于

    2024年02月03日
    瀏覽(106)
  • 設(shè)計(jì)分享 | STM32F103RCT6利用ULN2003驅(qū)動(dòng)步進(jìn)電機(jī)正反轉(zhuǎn)

    設(shè)計(jì)分享 | STM32F103RCT6利用ULN2003驅(qū)動(dòng)步進(jìn)電機(jī)正反轉(zhuǎn)

    https://mp.weixin.qq.com/s?__biz=Mzg4Mzc3NDUxOQ==mid=2247484170idx=1sn=3fa68d0fbf30cf614e8779abf38c3e2bchksm=cf430652f8348f44e4b95bb7b22ce7f9f5a86e13f421741aefd08cedb169708309c79566ab1ftoken=1923877603lang=zh_CN#rd https://mp.weixin.qq.com/s?__biz=Mzg4Mzc3NDUxOQ==mid=2247484170idx=1sn=3fa68d0fbf30cf614e8779abf38c3e2bchksm=cf430652f8348f44e4b95bb7b22ce7f9f5a8

    2023年04月17日
    瀏覽(88)
  • STM32F103RCT6開發(fā)板M3單片機(jī)教程06--定時(shí)器中斷

    STM32F103RCT6開發(fā)板M3單片機(jī)教程06--定時(shí)器中斷

    除非特別說明,本章節(jié)描述的模塊應(yīng)用于整個(gè) STM32F103xx 微控制器系列,因?yàn)槲覀兪褂檬?STM32F103RCT6開發(fā)板是mini最小系統(tǒng)板。 本教程使用是( 光明谷SUN_STM32mini開發(fā)板 ) ? 首先了解一下是STM32F10X定時(shí)器(Timer) ? 注: 小容量產(chǎn)品是指閃存存儲(chǔ)器容量在16K至32K字節(jié)之間的STM32F101

    2024年02月04日
    瀏覽(99)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包