管脚图:
串口配置:
主要配置如上;
下面是主要的代码,cubemx的生成文件并未配置DMA接收数据的地址以及长度,还有dma的开关也没有打开,这个要自己写的:
/* USER CODE BEGIN 0 */
uint8_t Usart1_RxBuff[USART1_RXBUFF_SIZE];
__align(8) char Usart1_TxBuff[USART1_TXBUFF_SIZE];
void USART_DMA_CONFIG(void)
{
LL_DMA_SetPeriphAddress(DMA1, LL_DMA_CHANNEL_5, (uint32_t)(&USART1->DR));// LL_USART_DMA_GetRegAddr(USART1->DR));
LL_DMA_SetMemoryAddress(DMA1, LL_DMA_CHANNEL_5, (uint32_t)Usart1_RxBuff);
LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_5, USART1_RXBUFF_SIZE);
LL_DMA_EnableIT_TC(DMA1, LL_DMA_CHANNEL_5);
LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_5);
LL_USART_EnableDMAReq_RX(USART1);
LL_USART_EnableIT_IDLE(USART1);
}
void USART_RxIdleCallback(void)
{
uint8_t cnt;
if(LL_USART_IsActiveFlag_IDLE(USART1))
{
LL_DMA_DisableChannel(DMA1, LL_DMA_CHANNEL_5); //¹Ø±ÕDMA
cnt = LL_DMA_GetDataLength(DMA1,LL_DMA_CHANNEL_5);
u1_printf("data len is:%d\r\n",USART1_RXBUFF_SIZE-cnt);
u1_printf("data rx is:%s\r\n",Usart1_RxBuff);
LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_5, USART1_RXBUFF_SIZE);
LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_5);
LL_USART_ClearFlag_IDLE(USART1);
}
}
稍后上传代码,