精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

STM32CUBEMX(8)--USART通過定時器中斷方式接收不定長數據

嵌入式單片機MCU開發 ? 來源:嵌入式單片機MCU開發 ? 作者:嵌入式單片機MC ? 2022-11-14 16:31 ? 次閱讀

概述

本文利用中斷實現串口不定長接收(非DMA),使用HAL庫,將接收的數據打印出去。

DMA接收請查看:https://blog.csdn.net/qq_24312945/article/details/106557538

硬件準備

首先需要準備一個開發板,這里我準備的是NUCLEO-F030R8的開發板:

在這里插入圖片描述

選擇芯片型號

使用STM32CUBEMX選擇芯片stm32f030r8,如下所示:

在這里插入圖片描述

配置時鐘

HSE與LSE分別為外部高速時鐘和低速時鐘,在本文中使用內置的時鐘源,故都選擇Disable選項,如下所示:

在這里插入圖片描述

配置時鐘樹

STM32F0的最高主頻到48M,所以配置48即可:

在這里插入圖片描述

串口配置

本次實驗使用的串口1進行串口通信,波特率配置為115200。

在這里插入圖片描述

中斷

在這里插入圖片描述

GPIO配置

板子上led為PA5端口,故設置PA5閃爍來驗證是否正確。

在這里插入圖片描述

定時器配置

本次實驗使用的是TIM3來進行計數。

在這里插入圖片描述

PWM頻率計算如下所示

在這里插入圖片描述

在上面配置TIM3參數,預分頻系數設置為480-1, 自動重載值設置為10000-1,那么PWM頻率為48,000,000/((480-1+1)*(10000-1+1))=10Hz,即 100ms一個周期。

生成工程設置

注意在生成工程設置中不能出現中文,不然會報錯。

在這里插入圖片描述

代碼生成設置

最后設置生成獨立的初始化文件:

在這里插入圖片描述

生成代碼

在這里插入圖片描述

配置keil

在這里插入圖片描述

代碼

在main.c中,先加入頭文件。

/* USER CODE BEGIN Includes */
#include "stdio.h"//printf頭文件
#include "string.h"//memset頭文件
/* USER CODE END Includes */

定義變量存儲。

/* USER CODE BEGIN PV */
uint8_t RxBuff[1];      //進入中斷接收數據的數組
uint8_t DataBuff[5000]; //保存接收到的數據的數組
int RxLine=0;           //接收到的數據長度
int Rx_flag=0;                    //接受到數據標志
/* USER CODE END PV */

定義printf的重定向函數fputc。

/* USER CODE BEGIN 0 */
void printf_usart(void);//輸出內容
int fputc(int ch, FILE* file)//定義printf的重定向函數fputc,滿足串口調試打印
{
    return HAL_UART_Transmit(&huart1, (uint8_t*)&ch, 1, 100);
}
/* USER CODE END 0 */

打開串口和定時器。

/* USER CODE BEGIN 2 */
    HAL_UART_Receive_IT(&huart1, (uint8_t *)RxBuff, 1); //打開串口中斷接收
    HAL_TIM_Base_Start_IT(&htim3);//開啟定時器
  /* USER CODE END 2 */

串口接受代碼,當接受到最后數據為FF時候,直接打印,否則等待100ms打印。

/* USER CODE BEGIN 4 */
void printf_usart(void)
{
    printf("數據長度=%d
",RxLine); 
    for(int i=0;iprintf("數據:[%d] = 0x%x
",i,DataBuff[i]);                            
    memset(DataBuff,0,sizeof(DataBuff));  //清空緩存數組
    //memset()作用:可以方便的清空一個結構類型的變量或數組。
    //例句:memset(aTxbuffer,0,sizeof(aTxbuffer))  用memset清空aTxbuffer。
    RxLine=0;  //清空接收長度
}


void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    if (htim->Instance == htim3.Instance)
    {
            HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5);
        /* Toggle LED */
            if(Rx_flag==1)
            {
                printf_usart();
                Rx_flag=0;
            }
        }   
}



// 捕獲中斷回調函數,每次捕獲到信號就會進入這個回調函數
void HAL_UART_RxCpltCallback(UART_HandleTypeDef*UartHandle)
{
    RxLine++;                      //每接收到一個數據,進入回調數據長度加1
    DataBuff[RxLine-1]=RxBuff[0];  //把每次接收到的數據保存到緩存數組
        Rx_flag=1;
    if(RxBuff[0]==0xff)            //接收結束標志位,這個數據可以自定義,根據實際需求,這里只做示例使用,不一定是0xff
    {
            printf_usart();
    }   
    RxBuff[0]=0;
    HAL_UART_Receive_IT(&huart1, (uint8_t *)RxBuff, 1); //每接收一個數據,就打開一次串口中斷接收,否則只會接收一個數據就停止接收
        __HAL_TIM_SET_COUNTER(&htim3, 1); // 計數清零,從頭開始計
}
/* USER CODE END 4 */

演示效果

可以看到 發送11 12 13需要等待100ms左右才能發送,如果最后加上ff直接發送。

在這里插入圖片描述

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 定時器
    +關注

    關注

    23

    文章

    3241

    瀏覽量

    114500
  • USART
    +關注

    關注

    1

    文章

    195

    瀏覽量

    30795
  • stm32cubemx
    +關注

    關注

    5

    文章

    282

    瀏覽量

    14763
收藏 人收藏

    評論

    相關推薦

    STM32CubeMx入門教程(3):定時器的使用

    導語“ 使用STM32CubeMx 生成初始化定時器代碼,實現定時器特定定時
    發表于 07-11 15:22 ?3888次閱讀
    <b class='flag-5'>STM32CubeMx</b>入門教程(3):<b class='flag-5'>定時器</b>的使用

    CW32L083串口中斷+定時器實現不定長數據接收

    CW32L083 用串口中斷定時器中斷實現串口的不定長數據接收,特別適用于AT指令的
    的頭像 發表于 07-12 09:00 ?1901次閱讀
    CW32L083串口<b class='flag-5'>中斷</b>+<b class='flag-5'>定時器</b>實現<b class='flag-5'>不定長</b><b class='flag-5'>數據</b><b class='flag-5'>接收</b>

    STM32CUBEMX(2)--USART通過DMA方式接收不定長數據

    ;stm32f0xx_it.c\"文件中斷外部變量引用: /* USER CODE BEGIN 0 */ #define BUFFERSIZE 255 //可接收的最大數據量 exte
    發表于 09-04 11:48

    STM32CUBEMX(8)--USART通過定時器中斷方式接收不定長數據

    概述 本文利用中斷實現串口不定長接收(非DMA),使用HAL庫,將接收數據打印出去。 DMA接收
    發表于 09-06 16:48

    STM32CubeMX串口+DMA接收不定長數據的函數分享

    STM32CubeMX串口+DMA接收不定長數據的函數分享
    發表于 12-07 07:23

    利用STM32單片機的IDLE空閑中斷接收不定長數據

    定長數據,無法穩定接收不定長數據,本章介紹利用STM32單片機的IDLE空閑
    發表于 12-13 06:46

    【MCU】基于STM32CubeMX定時器中斷實現LED閃爍

    基于STM32CubeMX定時器中斷實現 LED 閃爍本實驗基于STM32CubeMX實現對STM32開發板的配置,
    發表于 10-29 11:06 ?20次下載
    【MCU】基于<b class='flag-5'>STM32CubeMX</b><b class='flag-5'>定時器</b><b class='flag-5'>中斷</b>實現LED閃爍

    STM32CUBEMX(2)--USART通過DMA方式接收不定長數據

    STM32CUBEME--2USART通過DMA方式接收不定長數據概述硬件準備選擇芯片型號配置時
    發表于 12-01 15:06 ?0次下載
    <b class='flag-5'>STM32CUBEMX</b>(2)--<b class='flag-5'>USART</b><b class='flag-5'>通過</b>DMA<b class='flag-5'>方式</b><b class='flag-5'>接收</b><b class='flag-5'>不定長</b><b class='flag-5'>數據</b>

    STM32 HAL庫中串口空閑中斷+DMA 實現串口數據不定長接收

    Package for STM32F0 Series)本文內容:不定長數據接收的原理串口接收中斷
    發表于 12-06 18:36 ?26次下載
    <b class='flag-5'>STM32</b> HAL庫中串口空閑<b class='flag-5'>中斷</b>+DMA 實現串口<b class='flag-5'>數據</b>的<b class='flag-5'>不定長</b><b class='flag-5'>接收</b>

    STM32CubeMX HAL庫串口+DMA+IDLE空閑中斷不定長度數據接收和發送

    Cube_FW_F1_V1.8.0(STM32Cube MCU Package for STM32F1xx Series)本文內容:不定長數據接收
    發表于 12-07 11:36 ?24次下載
    <b class='flag-5'>STM32CubeMX</b> HAL庫串口+DMA+IDLE空閑<b class='flag-5'>中斷</b><b class='flag-5'>不定長度數據</b><b class='flag-5'>接收</b>和發送

    STM32+串口空閑中斷實現不定長數據接收

    常見的數據幀斷幀方式有兩種,一種是通過固定的協議格式斷幀,另外一個是通過兩幀數據的時間斷幀,下面介紹最后一種,利用
    發表于 12-20 19:34 ?7次下載
    <b class='flag-5'>STM32</b>+串口空閑<b class='flag-5'>中斷</b>實現<b class='flag-5'>不定長</b><b class='flag-5'>數據</b><b class='flag-5'>接收</b>

    瑞薩e2studio(12)----USRT通過定時器中斷方式接收不定長數據

    本篇文章主要介紹如何使用e2studio對瑞薩單片機進行USRT通過定時器中斷方式接收不定長
    的頭像 發表于 11-15 11:19 ?1151次閱讀
    瑞薩e2studio(12)----USRT<b class='flag-5'>通過</b><b class='flag-5'>定時器</b><b class='flag-5'>中斷</b><b class='flag-5'>方式</b><b class='flag-5'>接收</b><b class='flag-5'>不定長</b><b class='flag-5'>數據</b>

    瑞薩e2studio----USRT通過定時器中斷方式接收不定長數據

    本篇文章主要介紹如何使用e2studio對瑞薩單片機進行USRT通過定時器中斷方式接收不定長
    的頭像 發表于 11-02 17:21 ?1481次閱讀
    瑞薩e2studio----USRT<b class='flag-5'>通過</b><b class='flag-5'>定時器</b><b class='flag-5'>中斷</b><b class='flag-5'>方式</b><b class='flag-5'>接收</b><b class='flag-5'>不定長</b><b class='flag-5'>數據</b>

    STM32CubeMX之串口接收不定長數據

    基本串口通信通常只能接收定長數據,無法穩定接收不定長數據,本章介紹利用
    的頭像 發表于 05-11 09:59 ?3271次閱讀
    <b class='flag-5'>STM32CubeMX</b>之串口<b class='flag-5'>接收</b><b class='flag-5'>不定長</b><b class='flag-5'>數據</b>

    使用UART IDLE中斷接收不定長數據

    使用UART IDLE中斷接收不定長數據
    的頭像 發表于 09-18 15:41 ?1044次閱讀
    使用UART IDLE<b class='flag-5'>中斷</b><b class='flag-5'>接收</b><b class='flag-5'>不定長</b><b class='flag-5'>數據</b>