天天看點

使用STM32CUBEMX實作序列槽不定長資料的不定長收發

通過STM32的MDA和空閑中斷實作序列槽不定長資料的收發

首先使用STM32cubemx建立工程。

1、配置RCC:

使用STM32CUBEMX實作序列槽不定長資料的不定長收發

2、配置USART1:

使用STM32CUBEMX實作序列槽不定長資料的不定長收發

3、在configuration中配置USART1:

配置序列槽波特率、資料位等基本資訊

使用STM32CUBEMX實作序列槽不定長資料的不定長收發

添加DMA服務:方框右下方點選ADD添加

使用STM32CUBEMX實作序列槽不定長資料的不定長收發

勾選NVIC中斷服務:

使用STM32CUBEMX實作序列槽不定長資料的不定長收發

點選OK或APPLY儲存設定。

4、點選project -->setting或者alt+p進行工程檔案配置

填寫工程名字,以及選擇編譯器。使用keil5,選擇MDK-ARM V5

使用STM32CUBEMX實作序列槽不定長資料的不定長收發

第二頁配置

使用STM32CUBEMX實作序列槽不定長資料的不定長收發

之後ctrl+r編譯生成keil檔案。

打開工程,在usart.c中定義

uint16_t rx_len =0;

在uasrt.h中,定義

#define BUFFER_SIZE 100

extern uint8_t rx_buffer[];

extern uint8_t recv_end_flag;

extern uint16_t rx_len;

在stm32l4xx_it.c中找到相對應的中斷函數,修改如下:(需要添加usart.h頭檔案)

void USART1_IRQHandler(void)

{

}

在main.c檔案中,添加printf重定向語句。

#ifdef GNUC

#define

PUTCHAR_PROTOTYPE int __io_putchar(int ch)

#else

#define

PUTCHAR_PROTOTYPE int fputc(int ch, FILE f)

#endif

PUTCHAR_PROTOTYPE

{

HAL_UART_Transmit(&huart1 , (uint8_t)&ch, 1 , 0xffff);

return ch;

}

主函數while(1)循環前開啟空閑中斷和DMA服務

/開啟序列槽空閑中斷/

__HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE);

/啟動序列槽DMA接收/

HAL_UART_Receive_DMA(&huart1,rx_buffer,BUFFER_SIZE);

在while(1)中添加

if(recv_end_flag==1)

{

printf(“rx_len=%d\r\n”,rx_len);//列印接收長度

HAL_UART_Transmit(&huart1,rx_buffer,

rx_len,200);//接收資料列印出來

memset(rx_buffer,0,rx_len); //清除數組,需要添加string.h頭檔案

rx_len=0;//清除計數

recv_end_flag=0;//清除接收結束标志位

}

HAL_UART_Receive_DMA(&huart1,rx_buffer,BUFFER_SIZE);//重新打開DMA接收

編譯燒錄後就能實作序列槽不定長資料的收發。

使用STM32CUBEMX實作序列槽不定長資料的不定長收發

有問題發郵件[email protected]或者私信給我。

需要源碼的留郵箱,有看到會發。

繼續閱讀