首先是核心代码部分、
- // 关闭发送DMA,清除 DMA_UR3T_DONE
- DMA_UR3T_CR = 0;
- Delay100ms();
- DMA_UR3T_AMT = 10-1; // 设置传输总字节数量
- DMA_UR3T_AMTH = 0; // 设置传输总字节数量
- DMA_UR3_ITVH = (u8)(6000 >> 8);
- DMA_UR3_ITVL = (u8)(6000); // 设置间隔时间
- DMA_UR3T_CR = 0xc0; // 使能发送
- DmaTxFlag = 0;// 清除标志
- while (!DmaTxFlag)
- ; // 等待发送完成
-
- // 关闭发送DMA,清除 DMA_UR3T_DONE
- DMA_UR3T_CR = 0;
- DMA_UR3T_AMT = 5-1; // 设置传输总字节数量
- DMA_UR3T_AMTH = 0; // 设置传输总字节数量
- DMA_UR3_ITVH = (u8)(1000 >> 8);
- DMA_UR3_ITVL = (u8)(1000); // 设置间隔时间
- DMA_UR3T_CR = 0xc0; // 使能发送
- DmaTxFlag = 0;// 清除标志
- while (!DmaTxFlag)
- ; // 等待发送完成
复制代码
这里,脉冲序列是10个宽脉冲+5个窄脉冲,然后等待100ms再输出。
实际的波形如图所示
可以看到底下的显示,下降沿脉冲为15个,一般的伺服控制器对于空闲高低电平其实并无要求,如果觉得这种高电平方式不好,可以外部加一个4反相器芯片倒过来就行了。
这里提供完整的代码文档,欢迎大家来测试。
使用串口DMA完成高速可控脉冲输出.zip
(46.11 KB, 下载次数: 57)
|