if(HAL_DMA_Init(&hdma_memtomem_dma2_stream7) !=HAL_OK) { Error_Handler(); } 其实不难发现,HAL_DMA_Init这个函数的类型返回的是HAL_StatusTypeDef这个枚举的内容,具体如下: /** * @brief HAL Status structures definition*/typedefenum{ HAL_OK=0x00U, HAL_ERROR=0x01U, HAL_BUSY=0x02U, HAL...
记录一下调试stm32板卡过程中的几个问题 用stm32cubeMX生成的初始化代码。 UART DMA发送时一直返回HAL_BUSY。 这个问题感觉是HAL库的问题,在cube上开了DMA中断没有开UART的全局中断,一直返回这个,仔细查看是UART被阻塞了,重新初始化然后继续调用DMA发送的函数就可以,但这样并没有从根本上解决问题,后来发现DMA中断和...
在使用STM32CubeMX版本6.6.1生成HAL库时,遇到了一个串口DMA发送失败的bug。在尝试使用HAL_UART_Transmit_DMA函数进行发送操作时,始终遇到HAL_BUSY错误,而使用标准的HAL_UART_Transmit函数却能正常工作。经过深入排查,发现问题是由于串口初始化阶段未开启DMA时钟导致的配置失败。CubeMX自动生成的代码中,...
}//发送字符串voidmy_uart1_send_string(uint8_t *tdata){//等待发送状态OKwhile(HAL_DMA_GetState(&hdma_usart1_tx) == HAL_DMA_STATE_BUSY) HAL_Delay(1);//发送数据HAL_UART_Transmit_DMA(&huart1,tdata,strlen(tdata)); } uint8_t my_uart1_redata=0;//开启串口接收中断voidmy_uart1_en...
=HAL_OK){//解除忙状态(由ORE导致,清零ORE位)if(return_state==HAL_BUSY){//清除ORE错误// __HAL_UART_CLEAR_OREFLAG(&huart1);//清楚ORE标志位// huart1.RxState=HAL_UART_STATE_READY;huart1.Lock=HAL_UNLOCKED;//重新开始接收return_state=HAL_UART_Receive_IT(&huart1,(uint8_t*)&aRx...
由于gState被改变,所以此函数没有执行发送操作,而是直接返回HAL_BUSY。 tips: 在串口发送大量数据的时候,尽量在数据之间延时一段时间,防止数据堵塞等造成数据传输错误。 2. 定时器编码器与PWM输出(输出比较)不可以同时使用 此内容是参考博客:STM32一个定时器同时配置编码器和PWM输出时PWM无法正常输出的原因【避坑】...
* @retval HAL_Status 返回值 HAL_OK、HAL_ERROR、HAL_BUSY、HAL_TIMEOUT * */ HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size) // 串口接收中断回调函数 __weak void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) ...
return HAL_ERROR; } /* Process Locked */ __HAL_LOCK(huart); huart->pTxBuffPtr = pData; huart->TxXferSize = Size; huart->TxXferCount = Size; huart->ErrorCode = HAL_UART_ERROR_NONE; huart->gState = HAL_UART_STATE_BUSY_TX; ...
__HAL_RCC_I2C1_CLK_ENABLE();事实上这两句话并不是没有由Cube生成,也并不是没有包含在项目里,...
· HAL_UART_Receive_IT 该函数请求UART句柄huart,接收数据缓存区pData,以及期望接收的数据个数size。 进入到该函数中,首先会确保huart处于空闲状态,否则返回HAL_BUSY,同时校验参数pData和size的合法性,视情况返回HAL_ERROR /* Check that a Rx process is not already ongoing */if(huart->RxState==HAL_UAR...