使用的是UART7的RX端接收25字节长度的数据 代码如下UART_HandleTypeDef UART1_InitStructure; UART_HandleTypeDef UART7_InitStructure; DMA_HandleTypeDef DMA_UART7_RX; u8 aRxBuffer[25]; void My_Usart_Init(void) { UART7_InitStructure.Instance=UART7; UART7_InitStructure.Init.BaudRate=100000; UART7_InitStructure.Init.WordLength=UART_WORDLENGTH_8B; UART7_InitStructure.Init.StopBits=UART_STOPBITS_2; UART7_InitStructure.Init.Parity=UART_PARITY_EVEN; UART7_InitStructure.Init.HwFlowCtl=UART_HWCONTROL_NONE; UART7_InitStructure.Init.Mode=UART_MODE_RX; HAL_UART_Init(&UART7_InitStructure); __HAL_UART_ENABLE_IT(&UART7_InitStructure,UART_IT_IDLE); HAL_UART_Receive_DMA(&UART7_InitStructure, (u8 *)aRxBuffer, 25); } void DMA_Init(void) { __HAL_RCC_DMA2_CLK_ENABLE(); HAL_NVIC_SetPriority(DMA2_Stream2_IRQn,0,0); HAL_NVIC_EnableIRQ(DMA2_Stream2_IRQn); } void HAL_UART_MspInit(UART_HandleTypeDef *huart) { GPIO_InitTypeDef GPIO_InitStructure; if(huart->Instance==UART7) { __HAL_RCC_GPIOE_CLK_ENABLE(); __HAL_RCC_UART7_CLK_ENABLE(); GPIO_InitStructure.Pin=GPIO_PIN_7; GPIO_InitStructure.Mode=GPIO_MODE_AF_PP; GPIO_InitStructure.Pull=GPIO_NOPULL; GPIO_InitStructure.Speed=GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStructure.Alternate=GPIO_AF7_UART7; HAL_GPIO_Init(GPIOE,&GPIO_InitStructure); DMA_UART7_RX.Instance=DMA2_Stream2; DMA_UART7_RX.Init.Request=DMA_REQUEST_UART7_RX; DMA_UART7_RX.Init.Direction=DMA_PERIPH_TO_MEMORY; DMA_UART7_RX.Init.PeriphInc=DMA_PINC_DISABLE; DMA_UART7_RX.Init.MemInc=DMA_MINC_ENABLE; DMA_UART7_RX.Init.PeriphDataAlignment=DMA_PDATAALIGN_BYTE; DMA_UART7_RX.Init.MemDataAlignment=DMA_MDATAALIGN_BYTE; DMA_UART7_RX.Init.Mode=DMA_CIRCULAR; DMA_UART7_RX.Init.Priority=DMA_PRIORITY_VERY_HIGH; DMA_UART7_RX.Init.FIFOMode=DMA_FIFOMODE_DISABLE; DMA_UART7_RX.Init.FIFOThreshold=DMA_FIFO_THRESHOLD_FULL; DMA_UART7_RX.Init.MemBurst=DMA_MBURST_SINGLE; DMA_UART7_RX.Init.PeriphBurst=DMA_PBURST_SINGLE; HAL_DMA_Init(&DMA_UART7_RX); __HAL_LINKDMA(&UART7_InitStructure,hdmarx,DMA_UART7_RX); HAL_NVIC_EnableIRQ(UART7_IRQn); HAL_NVIC_SetPriority(UART7_IRQn,0,0); } } void Send_Data(u8 *data,u8 len) { HAL_UART_Transmit(&UART1_InitStructure,(u8 *)data,len,1000); } void UART7_IRQHandler(void) { u32 temp; HAL_UART_IRQHandler(&UART7_InitStructure); if(__HAL_UART_GET_FLAG(&UART7_InitStructure,UART_FLAG_IDLE)!=RESET) { __HAL_UART_CLEAR_IDLEFLAG(&UART7_InitStructure); temp=UART7_InitStructure.Instance->ISR; temp=UART7_InitStructure.Instance->RDR; HAL_UART_DMAStop(&UART7_InitStructure); temp=__HAL_DMA_GET_COUNTER(&DMA_UART7_RX); Send_Data(aRxBuffer,25); } // HAL_UART_Receive_DMA(&UART7_InitStructure, (u8 *)aRxBuffer, 25); } UART7接受到的数据再用USART1传给电脑 现在是传回来的数据全是空的 不知如何是好 |
STM32H723使用DMA方式实现定时器输入捕获只能执行一次?
STM32H7A3系列最大频率外部晶振无法使用
STM32H7ZGT6使用SPI+DMA方式驱动屏幕时候,使用阻塞式发送不会花屏幕,但是使用DMA方式会花屏。
STM32H750内部flash读写
STM32H743采用flash swap 进行IAP升级,reset后启动不了
STM32双核H7核间通信的方法
STM32H743IIC,HAL库驱动硬件I2C,hi2c2.state一直是busy. 为什么?
H747 DSI 模块的官方例程跑不通
MAC回环或以太网PHY芯片回环怎么实现?
STM32745/747芯片固件升级问题
有奇偶校验 那么数据位应该写9位的
找不到问题的时候 可以先用仿真看看 数据接收情况 还有寄存器
2)另外,中断处理要尽量快省,不要在UART7_IRQHandle 中处理Send_Data(aRxBuffer,25);
3)DMA2_Stream2_IRQn 中断有初始化吗?
4)main 在再初始化uart,DMA 后 调用HAL_UART_Receive_DMA(&UART7_InitStructure, (u8 *)aRxBuffer, 25) 一次 启动 DMA;
DMA2_Stream2_IRQn有初始化 就这一个中断
只接受的话是不是不需要开串口中断 只开DMA中断就行了
波特率是100K 发送端就是这个波特率
仿真看数据接受缓存全是0x00