是否可以通过DMA 控制PWM输出个数来控制一个模块?

2019-08-22 13:31发布

本帖最后由 xingnaipeng 于 2017-4-12 21:49 编辑

是这样的一个模块:1:控制口为单线口。
2:启动脉冲1ms低+4ms 高
3:输出字节:1ms低+3ms高为0;1ms高+3ms低为1,

目前采用的办法是delay_ms(X)来输出,但是这样,MCU的效率有点低。如果输出字节多的话,要有好几秒的delay了。

突然想到一个办法,就是把数据放到DMA里面,控制PWM。

求助是否可行,或者解决思路。
目前的程序:
void Write(u8 addr)
{
    u8 i;
    S_Low();
   delay_ms(1);
    S_High();
    delay_ms(4);
        for(i=0;i<8;i++)
        {
                S_High();
                if(addr&0x01)
                {
                        delay_ms(3);
                        S_Low();
                        delay_ms(1);        
                }
                else
                {
                        delay_ms(1);
                        S_Low();
                        delay_ms(3);                        
                }
                addr >>=1;
        }
        S_High();
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
xingnaipeng
1楼-- · 2019-08-22 19:03
 精彩回答 2  元偷偷看……
whyviking
2楼-- · 2019-08-22 21:33
用PWM还不如用定时器更新中断写,比如说发送1Byte数据。
使能定时器,在更新中断中判断数据的第一位,根据时序重新设置定时器下一次进入更新中断的时间,并置位相应I/O口。
这样你可以一次完成任意数量数据以任意时序进行发送。
xingnaipeng
3楼-- · 2019-08-23 02:58
whyviking 发表于 2017-4-12 22:13
用PWM还不如用定时器更新中断写,比如说发送1Byte数据。
使能定时器,在更新中断中判断数据的第一位,根据 ...

好想法。

一周热门 更多>