1、簡介
STM32F302的內核為Cortex-M4
直接存盤器存取(DMA)用來提供在外設和存盤器之間或者存盤器和存盤器之間的高速資料傳輸,無須CPU干預,資料可以通過DMA快速地移動,這就節省了CPU的資源來做其他操作,
2、準備
2.1、軟體
1、HAL 庫版本:STM32Cube FW_F3 V1.11.2
2.2、開發工具
1、STM32CubeMX 6.2.0
2、Keil uVision5 V5.34.0.0
2.3、代碼測驗時間
2021年7月24日
2.4、參考檔案
STM32F302參考手冊:RM0365
STM32F3 HAL庫用戶手冊:UM1786
3、CubeMX 工程配置
3.1、配置基本引數

3.2、DMA 通道配置

3.3、中斷配置

3.4、中斷優先級配置

3.5、注意事項
若出現串口列印的資料亂碼情況,1、查看波特率,2、查看時鐘配置
4、代碼配置
4.1、配置 UART 初始化代碼
在 usart.c 檔案中的 MX_USART1_UART_Init 函式添加中斷的使能
__HAL_UART_ENABLE_IT(&huart1,UART_IT_IDLE);

4.2、添加串口通信的個人組態檔
在工程中添加App 檔案夾,在檔案夾中添加 UartComm.c、UartComm.h 檔案,并配置,
UartComm.c
#include "UartComm.h"
uint8_t Rx_Flag = 0;
uint16_t Rx_Len;
uint8_t Rx_Buf1[Rx_Max];
uint8_t Rx_Buf2[Rx_Max];
UartComm.h
#ifndef _UartComm_H_
#define _UartComm_H_
#include "main.h"
/********************************************************
*下列定義在 stm32f3xx_it.c 和 main.c 檔案夾中呼叫
*在串口的全域中斷 void USART1_IRQHandler(void) 中使用
*
*
********************************************************/
#define Rx_Max 200
extern uint8_t Rx_Flag;
extern uint16_t Rx_Len;
extern uint8_t Rx_Buf1[Rx_Max];
extern uint8_t Rx_Buf2[Rx_Max];
#endif
4.3、配置中斷處理代碼
以下代碼中注釋處判斷狀態標志位的效果相同,可選其一

uint32_t Len;
// if(__HAL_UART_GET_IT(&huart1,UART_IT_IDLE) != RESET)
// {
// __HAL_UART_CLEAR_IT(&huart1,UART_CLEAR_IDLEF);
if((__HAL_UART_GET_FLAG(&huart1,UART_FLAG_IDLE) != RESET))
{
/*清除狀態暫存器和串口資料暫存器*/
__HAL_UART_CLEAR_IDLEFLAG(&huart1);
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_2);
HAL_UART_DMAStop(&huart1); //不停止DMA的接收,資料會在接收快取區1疊加
Len = huart1.hdmarx->Instance->CNDTR;
Rx_Len = Rx_Max - Len;
Rx_Flag = 1;
HAL_UART_Receive_DMA(&huart1,Rx_Buf1,Rx_Max);
HAL_UART_Transmit_DMA(&huart1,Rx_Buf1,strlen((char *)Rx_Buf1));
}
4.4、配置主函式
對主函式進行配置,測驗串口的 DMA 通信,

if(1 == Rx_Flag)
{
Rx_Flag = 0;
Rx_BufLen = Rx_Len;
for(unsigned int i=0;i<Rx_BufLen;i++)
{
Rx_Buf2[i] = Rx_Buf1[i];
}
for(unsigned int j=0;j<(strlen((char *)Rx_Buf2));j++)
{
HAL_Delay(100);
printf("串口DMA測驗%x\r\n",Rx_Buf2[j]);
}
memset((char *)Rx_Buf2,0,(strlen((char *)Rx_Buf2)));//清除接收的資料快取
}
5、測驗
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/290237.html
標籤:其他
