1.串口DMA的配置:DMA作为一种数据传输的工具,主要在串口中起到传输数据的作用。配置dma时需要将接收设置成循环模式,发送为正常模式。在串口中断中处理数据。
2.代码补充
在usart.h中
#define BUFFER_SIZE 200
extern volatile uint8_t rx_len ;
extern volatile uint8_t recv_end_flag;
extern uint8_t rx_buffer[200];
extern void DMA_Usart1_Send(uint8_t *buf,uint8_t len);
extern void DMA_Usart1_Send(uint8_t *buf,uint8_t len);
usart.c中添加
volatile uint8_t rx_len ;
volatile uint8_t recv_end_flag;
uint8_t rx_buffer[200];
void DMA_Usart1_Send(uint8_t *buf,uint8_t len);
void DMA_Usart1_Send(uint8_t *buf,uint8_t len);
int fputc(int ch, FILE *f)
{
HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 1, 0xffff);
return ch;
}
__HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE);
HAL_UART_Receive_DMA(&huart1,rx_buffer,BUFFER_SIZE);
usart.c中添加
void DMA_Usart1_Send(uint8_t *buf,uint8_t len)
{
if(HAL_UART_Transmit_DMA(&huart1, buf,len)!= HAL_OK)
{
Error_Handler();
}
}
void DMA_Usart1_Read(uint8_t *Data,uint8_t len)
{
HAL_UART_Receive_DMA(&huart1,Data,len);
}
usart.c中添加
uint8_t rx_tmp[BUFFER_SIZE]={0};
uint16_t lens=0,Flags=0;
void USART1_IRQHandler(void)
{
uint32_t tmp_flag = 0;
uint32_t temp;
tmp_flag =__HAL_UART_GET_FLAG(&huart1,UART_FLAG_IDLE);
if((tmp_flag != RESET))
{
__HAL_UART_CLEAR_IDLEFLAG(&huart1);
HAL_UART_DMAStop(&huart1);
temp = __HAL_DMA_GET_COUNTER(&hdma_usart1_rx);
rx_len = BUFFER_SIZE - temp;
recv_end_flag = 1;
}
if(recv_end_flag == 1)
{
memcpy(rx_tmp,rx_buffer,rx_len);
Flags=19;
rx_len = 0;
recv_end_flag = 0;
memset(rx_buffer,0,rx_len);
}
HAL_UART_Receive_DMA(&huart1,rx_buffer,BUFFER_SIZE);
HAL_UART_IRQHandler(&huart1);
}
在main.c中添加
extern uint16_t lens,Flags;
extern uint8_t rx_tmp[BUFFER_SIZE];
uint8_t Senbuff[] = "Output Message by ";
DMA_Usart1_Send((uint8_t *)Senbuff, sizeof(Senbuff));
if(Flags==19)
{
printf("pc debug print:%s ",rx_tmp);
memset(rx_tmp,0,BUFFER_SIZE);
Flags=10;
}
uint16_t get_uart2_data(unsigned char *pd,unsigned short *len)
{
if(as==19)
{
*len=200;
memcpy(pd,rx_tmp,200);
printf("pc debug print:%s ",pd);
memset(rx_tmp,0,200);
as=10;
return 1;
}
return 0;
}
源码:https://download.csdn.net/download/weixin_44386927/56833040
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)