1.打開軟件如下圖;
2.選擇單片機,如下圖;
3.配置最大時鍾,如下圖
4.選擇usart1,配置異步通訊,並在DMA settings下添加USART1_RX和USART1_TX,DMA模式選擇NORMAL就行,如下圖;
5.添加usart1中斷,如下圖;
6.配置路徑,.c.h 后再點擊GENERATE CODE
7.生成工程代碼后,while上面初始化;
if (HAL_UART_Receive_DMA(&huart1, (uint8_t *)aRxBuffer, RXBUFFERSIZE) != HAL_OK)
{
/* Transfer error in reception process */
Error_Handler();
}
__HAL_UART_ENABLE_IT(&huart1,UART_IT_IDLE);
//添加 #define RXBUFFERSIZE 50
//添加 uint8_t aRxBuffer[RXBUFFERSIZE];
/***************************下面添加printf第一段***************/
#ifdef __GNUC__
/* With GCC, small printf (option LD Linker->Libraries->Small printf
set to 'Yes') calls __io_putchar() */
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
/***************************下面添加printf第二段***************/
PUTCHAR_PROTOTYPE
{
/* Place your implementation of fputc here */
/* e.g. write a character to the USART1 and Loop until the end of transmission */
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
return ch;
}
8.編寫,聲明,定義,調用 void HAL_UART_IdleCallback(UART_HandleTypeDef*huart);
/***************************下面main.h內添加函數聲明***************/
void HAL_UART_IdleCallback(UART_HandleTypeDef*huart);
/***************************下面main.c內添加庫函數***************/
#include "string.h"
#include "stdio.h"
/***************************下面main.c內添加編寫的回調函數***************/
void HAL_UART_IdleCallback(UART_HandleTypeDef*huart)
{
//清除標志位
__HAL_UART_CLEAR_IDLEFLAG(huart);
//停止DMA接收
HAL_UART_DMAStop(huart);
//返回發送回的數據
printf("%s",aRxBuffer);
printf("Helloorld!\n");
//清除緩存區
memset(aRxBuffer,0x00,50);
//開始DMA接收
if(HAL_UART_Receive_DMA(huart,(uint8_t*)aRxBuffer,RXBUFFERSIZE)!=HAL_OK)
{
Error_Handler();
}
}
/***********下面stm32f4xx_it.c內void USART1_IRQHandler(void)中添加編寫的回調函數***************/
if(__HAL_UART_GET_FLAG(&huart1,UART_FLAG_IDLE)!=RESET)
{
// HAL_UART_IdleCallback(&huart1);
HAL_UART_IdleCallback(&huart1); // HAL_IdleCallback(UART_HandleTypeDef*huart);
}
9.結束。 例:發送123。返回123 ; 發送5909.返回5909;
10. 添加DMA發送
10.1
添加:#define TXBUFFERSIZE 50
添加:uint8_t aTxBuffer[TXBUFFERSIZE];
開啟發送中斷:
HAL_UART_Transmit_DMA(&huart1, (uint8_t *)aTxBuffer, lslong);
__HAL_UART_ENABLE_IT(&huart1,UART_IT_TC);
添加 發送回調函數:
//發送結束回調函數,使能485接收;
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{
//開始DMA接收
if(HAL_UART_Receive_DMA(huart,(uint8_t*)aRxBuffer,RXBUFFERSIZE)!=HAL_OK)
{
Error_Handler();
}
}