中级会员
- 积分
- 240
- 金钱
- 240
- 注册时间
- 2018-4-21
- 在线时间
- 105 小时
|
1金钱
做了一个DMA发送的任务,用HAL_UART_Transmit_IT和HAL_UART_Transmit都能正常发送 但是用HAL_UART_Transmit_DMA就不行,调试的时候进不了中断 不用操作系统的时候DMA能正常发送用的是HAL库,10.0.2版本的Freertos 用STM32CubeMX生成的代码
中断代码如下,用的是串口2
__IO ITStatus UART2_Ready = SET;
void USART2_DMA_Send(u8 *data,u8 len)
{
while(HAL_UART_Transmit_DMA(&UART2_InitStructure,data,len)!=HAL_OK)
{}
while(UART2_Ready!=SET)
{}
UART2_Ready=RESET;
}
u8 tast[5]={0x0a,0x0b,0x0c,0x0d,0x0e};
void UARTTask(void *arguement)
{
TickType_t xLastWakeTime;
xLastWakeTime=xTaskGetTickCount();
while(1)
{
vTaskDelayUntil(&xLastWakeTime,100);
USART2_DMA_Send((u8 *)tast,5);
}
}
void DMA1_Stream1_IRQHandler(void)
{
HAL_DMA_IRQHandler(UART2_InitStructure.hdmatx);
}
void USART2_IRQHandler(void)
{
HAL_UART_IRQHandler(&UART2_InitStructure);
}
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *UartHandle)
{
if(UartHandle->Instance==USART2)
{UART2_Ready=SET;}
}
任务里面是调用USART2_DMA_Send发送一个数组 调试前打了断点 但没有进中断 不知道卡在哪里
|
|