在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32CUBEMX(8)--USART通過(guò)定時(shí)器中斷方式接收不定長(zhǎng)數(shù)據(jù)

嵌入式單片機(jī)MCU開(kāi)發(fā) ? 來(lái)源:嵌入式單片機(jī)MCU開(kāi)發(fā) ? 作者:嵌入式單片機(jī)MC ? 2022-11-14 16:31 ? 次閱讀

概述

本文利用中斷實(shí)現(xiàn)串口不定長(zhǎng)接收(非DMA),使用HAL庫(kù),將接收的數(shù)據(jù)打印出去。

DMA接收請(qǐng)查看:https://blog.csdn.net/qq_24312945/article/details/106557538

硬件準(zhǔn)備

首先需要準(zhǔn)備一個(gè)開(kāi)發(fā)板,這里我準(zhǔn)備的是NUCLEO-F030R8的開(kāi)發(fā)板:

在這里插入圖片描述

選擇芯片型號(hào)

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

在這里插入圖片描述

配置時(shí)鐘

HSE與LSE分別為外部高速時(shí)鐘和低速時(shí)鐘,在本文中使用內(nèi)置的時(shí)鐘源,故都選擇Disable選項(xiàng),如下所示:

在這里插入圖片描述

配置時(shí)鐘樹(shù)

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

在這里插入圖片描述

串口配置

本次實(shí)驗(yàn)使用的串口1進(jìn)行串口通信,波特率配置為115200。

在這里插入圖片描述

中斷

在這里插入圖片描述

GPIO配置

板子上led為PA5端口,故設(shè)置PA5閃爍來(lái)驗(yàn)證是否正確。

在這里插入圖片描述

定時(shí)器配置

本次實(shí)驗(yàn)使用的是TIM3來(lái)進(jìn)行計(jì)數(shù)。

在這里插入圖片描述

PWM頻率計(jì)算如下所示

在這里插入圖片描述

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

生成工程設(shè)置

注意在生成工程設(shè)置中不能出現(xiàn)中文,不然會(huì)報(bào)錯(cuò)。

在這里插入圖片描述

代碼生成設(shè)置

最后設(shè)置生成獨(dú)立的初始化文件:

在這里插入圖片描述

生成代碼

在這里插入圖片描述

配置keil

在這里插入圖片描述

代碼

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

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

定義變量存儲(chǔ)。

/* USER CODE BEGIN PV */
uint8_t RxBuff[1];      //進(jìn)入中斷接收數(shù)據(jù)的數(shù)組
uint8_t DataBuff[5000]; //保存接收到的數(shù)據(jù)的數(shù)組
int RxLine=0;           //接收到的數(shù)據(jù)長(zhǎng)度
int Rx_flag=0;                    //接受到數(shù)據(jù)標(biāo)志
/* USER CODE END PV */

定義printf的重定向函數(shù)fputc。

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

打開(kāi)串口和定時(shí)器。

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

串口接受代碼,當(dāng)接受到最后數(shù)據(jù)為FF時(shí)候,直接打印,否則等待100ms打印。

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


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;
            }
        }   
}



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

演示效果

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

在這里插入圖片描述

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 定時(shí)器
    +關(guān)注

    關(guān)注

    23

    文章

    3248

    瀏覽量

    114800
  • USART
    +關(guān)注

    關(guān)注

    1

    文章

    195

    瀏覽量

    30857
  • stm32cubemx
    +關(guān)注

    關(guān)注

    5

    文章

    283

    瀏覽量

    14809
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    STM32CubeMx入門(mén)教程(3):定時(shí)器的使用

    導(dǎo)語(yǔ)“ 使用STM32CubeMx 生成初始化定時(shí)器代碼,實(shí)現(xiàn)定時(shí)器特定定時(shí)
    發(fā)表于 07-11 15:22 ?4077次閱讀
    <b class='flag-5'>STM32CubeMx</b>入門(mén)教程(3):<b class='flag-5'>定時(shí)器</b>的使用

    CW32L083串口中斷+定時(shí)器實(shí)現(xiàn)不定長(zhǎng)數(shù)據(jù)接收

    CW32L083 用串口中斷定時(shí)器中斷實(shí)現(xiàn)串口的不定長(zhǎng)數(shù)據(jù)接收,特別適用于AT指令的
    的頭像 發(fā)表于 07-12 09:00 ?2018次閱讀
    CW32L083串口<b class='flag-5'>中斷</b>+<b class='flag-5'>定時(shí)器</b>實(shí)現(xiàn)<b class='flag-5'>不定長(zhǎng)</b><b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>接收</b>

    STM32CUBEMX(2)--USART通過(guò)DMA方式接收不定長(zhǎng)數(shù)據(jù)

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

    STM32CUBEMX(8)--USART通過(guò)定時(shí)器中斷方式接收不定長(zhǎng)數(shù)據(jù)

    概述 本文利用中斷實(shí)現(xiàn)串口不定長(zhǎng)接收(非DMA),使用HAL庫(kù),將接收數(shù)據(jù)打印出去。 DMA接收
    發(fā)表于 09-06 16:48

    STM32CubeMX串口+DMA接收不定長(zhǎng)數(shù)據(jù)的函數(shù)分享

    STM32CubeMX串口+DMA接收不定長(zhǎng)數(shù)據(jù)的函數(shù)分享
    發(fā)表于 12-07 07:23

    利用STM32單片機(jī)的IDLE空閑中斷接收不定長(zhǎng)數(shù)據(jù)

    定長(zhǎng)數(shù)據(jù),無(wú)法穩(wěn)定接收不定長(zhǎng)數(shù)據(jù),本章介紹利用STM32單片機(jī)的IDLE空閑
    發(fā)表于 12-13 06:46

    【MCU】基于STM32CubeMX定時(shí)器中斷實(shí)現(xiàn)LED閃爍

    基于STM32CubeMX定時(shí)器中斷實(shí)現(xiàn) LED 閃爍本實(shí)驗(yàn)基于STM32CubeMX實(shí)現(xiàn)對(duì)STM32開(kāi)發(fā)板的配置,
    發(fā)表于 10-29 11:06 ?20次下載
    【MCU】基于<b class='flag-5'>STM32CubeMX</b><b class='flag-5'>定時(shí)器</b><b class='flag-5'>中斷</b>實(shí)現(xiàn)LED閃爍

    STM32CUBEMX(2)--USART通過(guò)DMA方式接收不定長(zhǎng)數(shù)據(jù)

    STM32CUBEME--2USART通過(guò)DMA方式接收不定長(zhǎng)數(shù)據(jù)概述硬件準(zhǔn)備選擇芯片型號(hào)配置時(shí)
    發(fā)表于 12-01 15:06 ?0次下載
    <b class='flag-5'>STM32CUBEMX</b>(2)--<b class='flag-5'>USART</b><b class='flag-5'>通過(guò)</b>DMA<b class='flag-5'>方式</b><b class='flag-5'>接收</b><b class='flag-5'>不定長(zhǎng)</b><b class='flag-5'>數(shù)據(jù)</b>

    STM32 HAL庫(kù)中串口空閑中斷+DMA 實(shí)現(xiàn)串口數(shù)據(jù)不定長(zhǎng)接收

    Package for STM32F0 Series)本文內(nèi)容:不定長(zhǎng)數(shù)據(jù)接收的原理串口接收中斷
    發(fā)表于 12-06 18:36 ?26次下載
    <b class='flag-5'>STM32</b> HAL庫(kù)中串口空閑<b class='flag-5'>中斷</b>+DMA 實(shí)現(xiàn)串口<b class='flag-5'>數(shù)據(jù)</b>的<b class='flag-5'>不定長(zhǎng)</b><b class='flag-5'>接收</b>

    STM32CubeMX HAL庫(kù)串口+DMA+IDLE空閑中斷不定長(zhǎng)度數(shù)據(jù)接收和發(fā)送

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

    STM32+串口空閑中斷實(shí)現(xiàn)不定長(zhǎng)數(shù)據(jù)接收

    常見(jiàn)的數(shù)據(jù)幀斷幀方式有兩種,一種是通過(guò)固定的協(xié)議格式斷幀,另外一個(gè)是通過(guò)兩幀數(shù)據(jù)的時(shí)間斷幀,下面介紹最后一種,利用
    發(fā)表于 12-20 19:34 ?7次下載
    <b class='flag-5'>STM32</b>+串口空閑<b class='flag-5'>中斷</b>實(shí)現(xiàn)<b class='flag-5'>不定長(zhǎng)</b><b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>接收</b>

    瑞薩e2studio(12)----USRT通過(guò)定時(shí)器中斷方式接收不定長(zhǎng)數(shù)據(jù)

    本篇文章主要介紹如何使用e2studio對(duì)瑞薩單片機(jī)進(jìn)行USRT通過(guò)定時(shí)器中斷方式接收不定長(zhǎng)
    的頭像 發(fā)表于 11-15 11:19 ?1187次閱讀
    瑞薩e2studio(12)----USRT<b class='flag-5'>通過(guò)</b><b class='flag-5'>定時(shí)器</b><b class='flag-5'>中斷</b><b class='flag-5'>方式</b><b class='flag-5'>接收</b><b class='flag-5'>不定長(zhǎng)</b><b class='flag-5'>數(shù)據(jù)</b>

    瑞薩e2studio----USRT通過(guò)定時(shí)器中斷方式接收不定長(zhǎng)數(shù)據(jù)

    本篇文章主要介紹如何使用e2studio對(duì)瑞薩單片機(jī)進(jìn)行USRT通過(guò)定時(shí)器中斷方式接收不定長(zhǎng)
    的頭像 發(fā)表于 11-02 17:21 ?1552次閱讀
    瑞薩e2studio----USRT<b class='flag-5'>通過(guò)</b><b class='flag-5'>定時(shí)器</b><b class='flag-5'>中斷</b><b class='flag-5'>方式</b><b class='flag-5'>接收</b><b class='flag-5'>不定長(zhǎng)</b><b class='flag-5'>數(shù)據(jù)</b>

    STM32CubeMX之串口接收不定長(zhǎng)數(shù)據(jù)

    基本串口通信通常只能接收定長(zhǎng)數(shù)據(jù),無(wú)法穩(wěn)定接收不定長(zhǎng)數(shù)據(jù),本章介紹利用
    的頭像 發(fā)表于 05-11 09:59 ?3397次閱讀
    <b class='flag-5'>STM32CubeMX</b>之串口<b class='flag-5'>接收</b><b class='flag-5'>不定長(zhǎng)</b><b class='flag-5'>數(shù)據(jù)</b>

    使用UART IDLE中斷接收不定長(zhǎng)數(shù)據(jù)

    使用UART IDLE中斷接收不定長(zhǎng)數(shù)據(jù)
    的頭像 發(fā)表于 09-18 15:41 ?1129次閱讀
    使用UART IDLE<b class='flag-5'>中斷</b><b class='flag-5'>接收</b><b class='flag-5'>不定長(zhǎng)</b><b class='flag-5'>數(shù)據(jù)</b>
    主站蜘蛛池模板: 美国人与性xxxxxxx| 夜色伊人| 亚洲国产成人在人网站天堂| 你懂的福利| 激情午夜婷婷| 高清毛片一区二区三区| 伊人91在线| 色爱区综合激月婷婷激情五月| 亚洲黄站| 欧美日韩一区二区视频图片| 夜夜草天天干| 亚洲男人的天堂久久香蕉| 日本动漫免费看| 天天干天天干天天干| 5151hh四虎国产精品| 一 级 黄 色 片生活片| 国产三级中文字幕| 国产成人午夜片在线观看| 亚洲国产婷婷综合在线精品| 国产精品嫩草影院一二三区| 澳门久久精品| 色多视频| 国产精品久久婷婷六月丁香| 国产精品露脸脏话对白| 天堂资源wwww在线看| 狠狠色狠狠色综合日日32| 国产美女视频爽爽爽| 无遮挡很爽很污很黄很色的网站| 大片毛片女女女女女女女| 粉嫩尤物在线456| 四虎在线永久免费视频网站| 亚洲午夜久久| 亚洲国产欧美在线人成aaa| 免费成人黄色网址| 91大神大战高跟丝袜美女| 三级毛片在线免费观看| 日本高清视频网站www| 亚洲68283精品人体| 九色 在线| 久操视频免费看| 四虎影永久在线观看精品|