UART如何使用DMA发送多次数据
我根据库例程在配置UART和DMA之后,想在主程序中能用DMA进行多次UART的发送,调用 USART_DMACmd(UART4, USART_DMAReq_Tx, ENABLE);
DMA_Cmd (DMA2_Channel5,ENABLE); 能成功发送一次数据,但是接下来就不能正常发送了。
而DMA_GetFlagStatus(DMA2_FLAG_TC5)==SET始终不能满足,不管是用中断去判断还是循环去读。是什么地方出错了呢?
:o
RE:UART如何使用DMA发送多次数据
DMA_SetCurrDataCounter(COM_DMA_TX_CHANNEL, resLen);RE:UART如何使用DMA发送多次数据
第二次发送的时候要 重新配置长度。RE:UART如何使用DMA发送多次数据
//串口DMA发送测试Uart_Send_Buffer = 1;
Uart_Send_Buffer = 2;
Uart_Send_Buffer = 3;
Uart_Send_Buffer = 4;
Uart_Send_Buffer = 5;
i = 1;
while (1)
{
//检查串口是否可以发送
while (Flag_Uart_Send);
Flag_Uart_Send = 1;
//设置传输数据长度
DMA_SetCurrDataCounter(DMA1_Channel4,i);
//打开DMA
DMA_Cmd(DMA1_Channel4,ENABLE);
i++;
if (i > 5)
{
i = 1;
}
}
RE:UART如何使用DMA发送多次数据
这是发送的中断处理函数,你看看自己有没有哪里弄错了//串口1DMA方式发送中断
void DMA1_Channel4_IRQHandler(void)
{
//清除标志位
DMA_ClearFlag(DMA1_FLAG_TC4);
//DMA_ClearITPendingBit(DMA1_FLAG_TC4);
//DMA1->IFCR |= DMA1_FLAG_TC4;
//关闭DMA
DMA_Cmd(DMA1_Channel4,DISABLE);
//DMA1_Channel4->CCR &= ~(1
回复:UART如何使用DMA发送多次数据
主循环里面不需要去调用USART_DMACmd(UART4, USART_DMAReq_Tx, ENABLE);直接就不发送数据了呢。。。
回复第 3 楼 于2013-10-08 16:16:56发表:
//串口DMA发送测试
Uart_Send_Buffer = 1;
Uart_Send_Buffer = 2;
Uart_Send_Buffer = 3;
Uart_Send_Buffer = 4;
Uart_Send_Buffer = 5;
i = 1;
while (1)
{
//检查串口是否可以发送
while (Flag_Uart_Send);
Flag_Uart_Send = 1;
//设置传输数据长度
DMA_SetCurrDataCounter(DMA1_Channel4,i);
//打开DMA
DMA_Cmd(DMA1_Channel4,ENABLE);
i++;
if (i > 5)
{
i = 1;
}
}
回复:UART如何使用DMA发送多次数据
<div style="padding:5px;border:1px dashed #ccc;">不去判断DMA1_FLAG_TC4标志,直接给清除了么?为什么要关闭DMA呢?
在主循环再送数据长度和开启DMA_Cmd么?
需要调用USART_DMACmd么?
回复第 4 楼 于2013-10-08 21:35:59发表:
这是发送的中断处理函数,你看看自己有没有哪里弄错了
//串口1DMA方式发送中断
void DMA1_Channel4_IRQHandler(void)
{
//清除标志位
DMA_ClearFlag(DMA1_FLAG_TC4);
//DMA_ClearITPendingBit(DMA1_FLAG_TC4);
//DMA1->IFCR |= DMA1_FLAG_TC4;
//关闭DMA
DMA_Cmd(DMA1_Channel4,DISABLE);
//DMA1_Channel4->CCR &= ~(1
页:
[1]