|
void usart3_init(u32 bound){ //UART 初始化设置 Uart3_Handler.Instance=USART3; //USART1 Uart3_Handler.Init.BaudRate=bound; //波特率 Uart3_Handler.Init.WordLength=UART_WORDLENGTH_8B; //字长为8位数据格式 Uart3_Handler.Init.StopBits=UART_STOPBITS_1; //一个停止位 Uart3_Handler.Init.Parity=UART_PARITY_NONE; //无奇偶校验位 Uart3_Handler.Init.HwFlowCtl=UART_HWCONTROL_NONE; //无硬件流控 Uart3_Handler.Init.Mode=UART_MODE_TX_RX; //收发模式 Uart3_Handler.Init.OverSampling = UART_OVERSAMPLING_16; Uart3_Handler.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; if(HAL_UART_DeInit(&Uart3_Handler) != HAL_OK) { Error_Handler(__FILE__, __LINE__); } if(HAL_UART_Init(&Uart3_Handler) != HAL_OK)//HAL_UART_Init()会使能UART1 { Error_Handler(__FILE__, __LINE__); } HAL_UART_Receive_IT(&Uart3_Handler, (u8 *)aRxBuffer, RXBUFFERSIZE);//该函数会开启接收中断:标志位UART_IT_RXNE,并且设置接收缓冲以及接收缓冲接收最大数据量}
void MYDMA_Usart3_Config(void)
{
DMA_Stream_TypeDef *DMA_Streamx = DMA1_Stream0;
if((u32)DMA_Streamx>(u32)DMA2)//得到当前stream是属于DMA2还是DMA1
{
__HAL_RCC_DMA2_CLK_ENABLE();//DMA2时钟使能
}
else
{
__HAL_RCC_DMA1_CLK_ENABLE();//DMA1时钟使能
}
//Tx DMA配置
UART3TxDMA_Handler.Instance=DMA_Streamx; //数据流选择
UART3TxDMA_Handler.Init.Request=DMA_REQUEST_USART3_TX; //USART1发送DMA
UART3TxDMA_Handler.Init.Direction=DMA_MEMORY_TO_PERIPH; //存储器到外设
UART3TxDMA_Handler.Init.PeriphInc=DMA_PINC_DISABLE; //外设非增量模式
UART3TxDMA_Handler.Init.MemInc=DMA_MINC_ENABLE; //存储器增量模式
UART3TxDMA_Handler.Init.PeriphDataAlignment=DMA_PDATAALIGN_BYTE; //外设数据长度:8位
UART3TxDMA_Handler.Init.MemDataAlignment=DMA_MDATAALIGN_BYTE; //存储器数据长度:8位
UART3TxDMA_Handler.Init.Mode=DMA_NORMAL; //外设流控模式
UART3TxDMA_Handler.Init.Priority=DMA_PRIORITY_MEDIUM; //中等优先级
UART3TxDMA_Handler.Init.FIFOMode=DMA_FIFOMODE_DISABLE;
UART3TxDMA_Handler.Init.FIFOThreshold=DMA_FIFO_THRESHOLD_FULL;
UART3TxDMA_Handler.Init.MemBurst=DMA_MBURST_INC4; //存储器突发单次传输
UART3TxDMA_Handler.Init.PeriphBurst=DMA_MBURST_INC4; //外设突发单次传输
HAL_DMA_DeInit(&UART3TxDMA_Handler);
HAL_DMA_Init(&UART3TxDMA_Handler);
__HAL_LINKDMA(&Uart3_Handler,hdmatx,UART3TxDMA_Handler); //将DMA与USART1联系起来(发送DMA)
/* 设置DMA接收中断 */
// HAL_DMA_RegisterCallback(&UART3TxDMA_Handler, HAL_DMA_XFER_CPLT_CB_ID, HAL_UARTDMA_TxCpltCallback);
HAL_NVIC_SetPriority(DMA1_Stream0_IRQn, 3, 0);
HAL_NVIC_EnableIRQ(DMA1_Stream0_IRQn);
}
|
|