485使能端每要切换电平才收发数据串口用
比根水管串口DMA数据像水流485芯片水龙必须先打水阀水才能流
DMA接收数据只采用查询用此函数还可以。
但同时开了DMA中断的~~~~~~~
不管什么时候,都是接收完整个数据包之后才对该包进行处理,是吧?
函数DMA_GetCurrDataCounte()只得到当前收到了多少个数据,而不知道接收数据完成没有的
STM32要是有串口接收超时功能就好了。
问:如何利用STM32的资源自己做个类似超时的功能?加上DMA作为类似的接收FIFO.
如果没开中断就用查询的方式,下面是DMA1
Channel5的,其他通道类似
/*
等待DMA传输完成
*/
while
(!DMA_GetFlagStatus(DMA1_FLAG_TC5));
/*
清除DMA完成标志
*/
DMA_ClearFlag(DMA1_FLAG_TC5);
/*
关闭DMA传输
*/
DMA_Cmd(DMA1_Channel5,
DISABLE);
执行完上面后就可以接着下一次发送了,中断方式类似,只是要在中断里执行后两个操作,不需要等待
在发数据前要先将P。7这里拉高
收数据前拉低。STM32这里也一样,启动DMA时要先做这一件事
USART_DMACmd(USART2,USART_DMAReq_Tx,ENABLE); //使能串口2的DMA发送
/*等待DMA传输完成,实际应用中,传输数据期间,可以执行另外的任务 */
while(1)
{
if(DMA_GetFlagStatus(DMA1_FLAG_TC7)!=RESET) //判断通道7传输完成
{
SZ_STM32_LED1Toggle();
SZ_STM32_LED2Toggle();
DMA_ClearFlag(DMA1_FLAG_TC7);//清除通道7传输完成标志
}
看不到你写的程序 给你个DMA中断提示
本文标签:stm32f407串口采用dma收发数据