OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6276|回复: 27

求问如何能做出这样的PWM波形,试了好多方法。

[复制链接]

83

主题

217

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2016-4-8
在线时间
116 小时
发表于 2016-9-30 22:57:56 | 显示全部楼层 |阅读模式
1金钱
用PWM比较输出模式的话,虽然可以调相位差,但是,占空比却不能调。
如果用PWM输出模式的话,可以调占空比,但是相位差却不能调。
请问各位大神,这四路波形要怎么调出来啊。
5A4FB90A-AB97-4DE6-B40F-A89C875A9412.PNG

最佳答案

查看完整内容[请看2#楼]

楼主需要的波形是4个通道严格首位相接吗? 如果是的话,同时有癖不愿意用中断,可以试试这样: 用一个高级定时器做带有 Repetition Counter 的 One-Pulse,每次启动时发生6次更新。 周期是输出通道上一个脉冲的时间。 4个输出通道都配置成 Toggle,CCR 设成1。 开启任意一个通道的比较事件 DMA(任意通道,看哪个 DMA 通道空闲就好),循环写定时器的 CCER,需要哪个通道输出脉冲时把它使能。 把这个定时器做成 Slave - ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

238

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1366
金钱
1366
注册时间
2016-5-26
在线时间
1698 小时
发表于 2016-9-30 22:57:57 | 显示全部楼层
本帖最后由 K.O.Carnivist 于 2016-10-6 11:50 编辑

楼主需要的波形是4个通道严格首位相接吗?

如果是的话,同时有癖不愿意用中断,可以试试这样:

用一个高级定时器做带有 Repetition Counter 的 One-Pulse,每次启动时发生6次更新。
周期是输出通道上一个脉冲的时间。
4个输出通道都配置成 Toggle,CCR 设成1。
开启任意一个通道的比较事件 DMA(任意通道,看哪个 DMA 通道空闲就好),循环写定时器的 CCER,需要哪个通道输出脉冲时把它使能。
把这个定时器做成 Slave - Trigger Mode,另外找一个定时器做 Master - Update,周期是四个脉冲的总周期。

优点是确实不用中断,通道之间波形严格相接。缺点是资源使用还是比较多的(2个定时器,1个DMA通道),而且输出波形哦定时器受限(需要高级定时器)。

需要改脉冲时间的话,改高级定时器的 ARR。
如果需要4个通道脉冲时间不一样,就再开任意一个通道的 DMA,循环写 ARR。

4-Step.png

[mw_shl_code=cpp,true]
   GPIO_InitTypeDef            GPIO_InitStructure;
    DMA_InitTypeDef             DMA_InitStructure;
    TIM_TimeBaseInitTypeDef     TIM_TimeBaseStructure;
    TIM_OCInitTypeDef           TIM_OCInitStructure;
   
    uint16_t CCER_Buffer[6] = {0x0203,
                               0x0213,
                               0x0312,
                               0x1302,
                               0x1202,
                               0x0202};
   
    SystemCoreClockConfigure();                              // configure HSI as System Clock
    SystemCoreClockUpdate();

    SysTick_Config(SystemCoreClock / 1000);                  // SysTick 1 msec interrupts
   
    /* Clock Configuration --------------------------------------------------*/
    /* DMA1 clock enable */
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
   
    /* TIM1 and GPIOA clock enable */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1 | RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
   
    /* TIM2 clock enable */
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

    /* GPIO Configuration ---------------------------------------------------*/
    /* TIM1 channels as alternate function push-pull */
    GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   
    GPIO_Init(GPIOA, &GPIO_InitStructure);
   
    /* DMA Configuration ----------------------------------------------------*/
    /* DMA1 Channel2 Config */
    DMA_DeInit(DMA1_Channel2);

    DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)0x40012C20;   /* TIM1_CCER */
    DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)CCER_Buffer;
    DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
    DMA_InitStructure.DMA_BufferSize = 6;
    DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
    DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
    DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
    DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
    DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
    DMA_InitStructure.DMA_Priority = DMA_Priority_High;
    DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;

    DMA_Init(DMA1_Channel2, &DMA_InitStructure);

    /* DMA1 Channel2 enable */
    DMA_Cmd(DMA1_Channel2, ENABLE);

    /* TIM1 Peripheral Configuration ----------------------------------------*/
    /* Time Base configuration */
    TIM_TimeBaseStructure.TIM_Prescaler = 0;
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseStructure.TIM_Period = 2400;
    TIM_TimeBaseStructure.TIM_ClockDivision = 0;
    TIM_TimeBaseStructure.TIM_RepetitionCounter = 5;

    TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);

    /* Channels Configuration in Toggle mode */
    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle;
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable;
    TIM_OCInitStructure.TIM_Pulse = 1;

    TIM_OC1Init(TIM1, &TIM_OCInitStructure);
    TIM_OC2Init(TIM1, &TIM_OCInitStructure);
    TIM_OC3Init(TIM1, &TIM_OCInitStructure);
    TIM_OC4Init(TIM1, &TIM_OCInitStructure);

    /* Main Output Enable */
    TIM_CtrlPWMOutputs(TIM1, ENABLE);

    /* One Pulse Mode selection */
    TIM_SelectOnePulseMode(TIM1, TIM_OPMode_Single);
   
    /* Slave Mode selection: Trigger Mode */
    TIM_SelectSlaveMode(TIM1, TIM_SlaveMode_Trigger);
    TIM_SelectInputTrigger(TIM1, TIM_TS_ITR1);
   
    /* TIM1 Channel1 DMA Request enable */
    TIM_DMACmd(TIM1, TIM_DMA_CC1, ENABLE);

    /* TIM2 Peripheral Configuration ----------------------------------------*/
    /* Time Base configuration */
    TIM_TimeBaseStructure.TIM_Period = 48000;
    TIM_TimeBaseStructure.TIM_Prescaler = 0;
    TIM_TimeBaseStructure.TIM_ClockDivision = 0;
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

    /* Master Mode selection */
    TIM_SelectOutputTrigger(TIM2, TIM_TRGOSource_Update);

    /* Select the Master Slave Mode */
    TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_Enable);

    /* TIM2 counter enable */
    TIM_Cmd(TIM2, ENABLE);
[/mw_shl_code]

淘汰人的从来是工具而不是年龄
嵌入式的冷知识屋 blog.csdn.net/k_o_carnivist
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-9-30 23:35:36 | 显示全部楼层
输出比较模式,可以调占空比的,不过要频繁中断,你的信号频率要求不高的话,可以用
回复

使用道具 举报

83

主题

217

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2016-4-8
在线时间
116 小时
 楼主| 发表于 2016-10-1 09:18:19 | 显示全部楼层
正点原子 发表于 2016-9-30 23:35
输出比较模式,可以调占空比的,不过要频繁中断,你的信号频率要求不高的话,可以用

<250HZ   , <500Hz那样子,应该不算高 。  请问原子哥,具体方法怎么操作呢?
回复

使用道具 举报

83

主题

217

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2016-4-8
在线时间
116 小时
 楼主| 发表于 2016-10-1 09:20:21 | 显示全部楼层
正点原子 发表于 2016-9-30 23:35
输出比较模式,可以调占空比的,不过要频繁中断,你的信号频率要求不高的话,可以用

频发中断……  可是我程序又有其他主要事情要处理,不是只单独输出这样的波形……不知道影响大不大
回复

使用道具 举报

6

主题

305

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2876
金钱
2876
注册时间
2016-7-17
在线时间
404 小时
发表于 2016-10-1 10:40:03 | 显示全部楼层
用模拟的方法,不用PWM模式。设立一个定时器,定时触发中断,在中断程序中手动开关四次即可。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-10-1 16:48:46 | 显示全部楼层

完全可以用输出比较模式
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-10-1 16:49:15 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

83

主题

217

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2016-4-8
在线时间
116 小时
 楼主| 发表于 2016-10-1 21:10:52 | 显示全部楼层
正点原子 发表于 2016-10-1 16:49
参考这里:http://openedv.com/forum.php?mod=viewthread&tid=21179&highlight=%CA%E4%B3%F6%B1%C8%BD%CF

这个帖子我之前看过,是用比较模式的PWM输出,但是比较模式的PWM都是占空50%的,就是这个头痛    我要的占空是可以调整的
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-10-1 21:33:46 | 显示全部楼层
vention 发表于 2016-10-1 21:10
这个帖子我之前看过,是用比较模式的PWM输出,但是比较模式的PWM都是占空50%的,就是这个头痛    我要 ...

谁说比较都是50%???你自己控制CCRx的值就行了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

33

主题

984

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8024
金钱
8024
注册时间
2014-8-13
在线时间
1595 小时
发表于 2016-10-1 21:58:55 | 显示全部楼层
你这里有个起和止对齐。我的一个项目要求起止有个可变(并且可调)的延迟,四路波形只有周期和周期性是一致的,占空比、后路与前路的延迟都是要可调的,而且最高频率还要到1us级别,调节还比较频繁。单单PWM根本就不好做。没办法,只能两路PWM+门电路合成一路
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2021-1-14
在线时间
32 小时
发表于 2016-10-3 07:08:47 | 显示全部楼层
定时器的级联应该可以吧
回复

使用道具 举报

106

主题

418

帖子

0

精华

高级会员

Rank: 4

积分
764
金钱
764
注册时间
2016-7-26
在线时间
123 小时
发表于 2016-10-3 09:04:05 | 显示全部楼层
本帖最后由 慕名兰 于 2016-10-3 09:06 编辑

菜鸟一枚,看能不能模拟类似于三相交流电的相位,程序的拓展性看行不,希望给你灵感
回复

使用道具 举报

3

主题

238

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1366
金钱
1366
注册时间
2016-5-26
在线时间
1698 小时
发表于 2016-10-5 11:42:09 | 显示全部楼层
mack13013 发表于 2016-10-1 21:58
你这里有个起和止对齐。我的一个项目要求起止有个可变(并且可调)的延迟,四路波形只有周期和周期性是一致 ...

用上面那个来做us级的脉冲宽度和延迟可变应该也是可以的:

4-Step-Delay.png

淘汰人的从来是工具而不是年龄
嵌入式的冷知识屋 blog.csdn.net/k_o_carnivist
回复

使用道具 举报

3

主题

238

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1366
金钱
1366
注册时间
2016-5-26
在线时间
1698 小时
发表于 2016-10-5 15:32:31 来自手机 | 显示全部楼层
本帖最后由 K.O.Carnivist 于 2016-10-6 11:50 编辑
K.O.Carnivist 发表于 2016-10-5 11:21
楼主需要的波形是4个通道严格首位相接吗?

如果是的话,同时有癖不愿意用中断,可以试试这样:

呃这个波形图有bug,更改脉冲宽度后,6x脉冲宽度超过了周期,变成两周期一组脉冲了。
脉冲宽度小于六分之一周期是可以的。

已更新。
回复

使用道具 举报

30

主题

1170

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1993
金钱
1993
注册时间
2016-2-16
在线时间
527 小时
发表于 2016-10-6 09:47:38 | 显示全部楼层

这个频率直接中断翻转,简单容易
回复

使用道具 举报

83

主题

217

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2016-4-8
在线时间
116 小时
 楼主| 发表于 2016-10-7 20:52:06 | 显示全部楼层
K.O.Carnivist 发表于 2016-10-5 11:21
楼主需要的波形是4个通道严格首位相接吗?

如果是的话,同时有癖不愿意用中断,可以试试这样:

确实挺耗费资源的。不过这个方法我来试下可行不。
回复

使用道具 举报

83

主题

217

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2016-4-8
在线时间
116 小时
 楼主| 发表于 2016-10-8 09:45:16 | 显示全部楼层
本帖最后由 vention 于 2016-10-8 10:58 编辑
K.O.Carnivist 发表于 2016-10-5 11:21
楼主需要的波形是4个通道严格首位相接吗?

如果是的话,同时有癖不愿意用中断,可以试试这样:

我把你的程序复制烧录在F103的开发板上,试过了,可行,可是有很多地方看不懂。比如,定时器2 TIM2是用来做什么的呢? TIM2的TIM_Period 有何目的还有CCER_Buffer[6]有什么用
回复

使用道具 举报

83

主题

217

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2016-4-8
在线时间
116 小时
 楼主| 发表于 2016-10-8 10:44:06 | 显示全部楼层
K.O.Carnivist 发表于 2016-10-5 15:32
呃这个波形图有bug,更改脉冲宽度后,6x脉冲宽度超过了周期,变成两周期一组脉冲了。
脉冲宽度小于六分 ...

哥,我试过你这个方法, 就是不知道这个周期从哪里调。 还有上面的CCER_Buffer[6]数组,我没理解是什么意思,看不懂CCER_Buffer[6]数组里面的值有什么作用,  DMA每次更新的6个值有什么作用。
回复

使用道具 举报

30

主题

282

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1001
金钱
1001
注册时间
2015-8-24
在线时间
241 小时
发表于 2016-10-8 11:44:05 | 显示全部楼层
jiong,我也碰到这样的问题了。一模一样的。也是想既能调节占空比,又能修改相位。调节占空比是处理其他的事情。
回复

使用道具 举报

3

主题

238

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1366
金钱
1366
注册时间
2016-5-26
在线时间
1698 小时
发表于 2016-10-8 12:38:04 | 显示全部楼层
vention 发表于 2016-10-8 09:45
我把你的程序复制烧录在F103的开发板上,试过了,可行,可是有很多地方看不懂。比如,定时器2 TIM2是用来 ...

TIM1的作用是:启动之后会计数更新6个周期,然后自己停止计数。这6个周期期间会按顺序输出4个脉冲,但输出完后就停止了不会输出下一组。
TIM2的作用是定期启动TIM1。调整总周期就是调整TIM2的周期。

TIM1输出4个脉冲的过程由TIM1的6个周期完成,6个周期的状态分别是:
周期0:CH1输出使能,其他通道输出禁止。
周期1:CH1、CH2输出使能,其他通道输出禁止。
周期2:CH2、CH3输出使能,其他通道输出禁止。
周期3:CH3、CH4输出使能,其他通道输出禁止。
周期4:CH4输出使能,其他通道输出禁止。
周期5:所有通道输出禁止。
这6个状态就是由CCER中的CCxE来控制的,对应的就是CCER_Buffer。

可以看到对每个通道来说,有2个周期是输出使能的,在这2个周期中这个通道的行为是:
1. 第一周期的CNT=1时刻触发通道的比较事件,通道输出Toggle变为低电平。
2. 同时触发DMA改写CCER,这个通道输出使能。
3. 第二周期的CNT=1时刻触发比较事件,通道输出Toggle变为高电平。
4. 第三周期的CNT=1时刻触发比较事件,通道输出Toggle变为低电平。
5. 同时触发DMA改写CCER,这个通道输出禁止,即此后保持低电平。
其中第3~4步之间的时间就是输出的脉冲。

漏掉的一点是如何让第1步Toggle之后这个通道输出的是低电平,这个是由CCER中的CCxP来控制的。

淘汰人的从来是工具而不是年龄
嵌入式的冷知识屋 blog.csdn.net/k_o_carnivist
回复

使用道具 举报

83

主题

217

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2016-4-8
在线时间
116 小时
 楼主| 发表于 2016-10-9 09:25:07 | 显示全部楼层
K.O.Carnivist 发表于 2016-10-8 12:38
TIM1的作用是:启动之后会计数更新6个周期,然后自己停止计数。这6个周期期间会按顺序输出4个脉冲,但输 ...

研究了你的话好久,但还是不懂  CCER_Buffer 数组中的值的计算。
uint16_t CCER_Buffer[6] = {
                            0x0203,
                            0x0213,
                            0x0312,
                            0x1302,
                            0x1202,
                            0x0202}
回复

使用道具 举报

3

主题

238

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1366
金钱
1366
注册时间
2016-5-26
在线时间
1698 小时
发表于 2016-10-9 09:49:59 | 显示全部楼层
vention 发表于 2016-10-9 09:25
研究了你的话好久,但还是不懂  CCER_Buffer 数组中的值的计算。
uint16_t CCER_Buffer[6] = {
        ...

啊?
CCER = 0x0203 就是CH4高电平有效、输出禁止,CH3低电平有效、输出禁止,CH2高电平有效、输出禁止,CH1低电平有效、输出使能……
CCER = 0x0213 就是CH4高电平有效、输出禁止,CH3低电平有效、输出禁止,CH2高电平有效、输出使能,CH1低电平有效、输出使能……
按CCER每一位的定义计算……
淘汰人的从来是工具而不是年龄
嵌入式的冷知识屋 blog.csdn.net/k_o_carnivist
回复

使用道具 举报

83

主题

217

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2016-4-8
在线时间
116 小时
 楼主| 发表于 2016-10-9 11:40:16 | 显示全部楼层
K.O.Carnivist 发表于 2016-10-9 09:49
啊?
CCER = 0x0203 就是CH4高电平有效、输出禁止,CH3低电平有效、输出禁止,CH2高电平有效、输出禁止 ...

soga  秒懂
回复

使用道具 举报

83

主题

217

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2016-4-8
在线时间
116 小时
 楼主| 发表于 2016-10-10 15:13:36 | 显示全部楼层
K.O.Carnivist 发表于 2016-10-8 12:38
TIM1的作用是:启动之后会计数更新6个周期,然后自己停止计数。这6个周期期间会按顺序输出4个脉冲,但输 ...

还有两小点不清楚的,望前辈提供资料查询。
①: (uint32_t)0x40012C20;   /* TIM1_CCER */     地址是如何确切获得,我查看STM32F1中文手册里面没有给到地址,如果我DMA是需要其他外设地址,又想知道确切的地址的,哪里能查阅到。
②:TIM_TS_ITR1,   slave, master关系 是TIM1和TIM2的, TIM_TS_ITR2是TIM1和TIM3……有没有手册关系图可以查询到,这个STM32F1中文手册里面也没有直观查询到的。
回复

使用道具 举报

3

主题

238

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1366
金钱
1366
注册时间
2016-5-26
在线时间
1698 小时
发表于 2016-10-10 16:48:33 | 显示全部楼层
vention 发表于 2016-10-10 15:13
还有两小点不清楚的,望前辈提供资料查询。
①: (uint32_t)0x40012C20;   /* TIM1_CCER */     地址是 ...


以 F103 为例,先在参考手册里面找 Memory and bus architecture 这一章的 Memory map,找到 TIM1 的基地址是 0x4001 2C00;然后在 Advanced-control timers 一章的 TIM1&TIM8 register map 里找到 TIMx_CCER 的偏移是 0x20。
或者写成 DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(TIM1->CCER) 这样也行,不用查地址了。


参考手册里面 Timers 章节的寄存器描述,TIMx_SMCR 的描述下面有表格,写了每个定时器做从机的4个内部触发源分别来自哪个定时器。

淘汰人的从来是工具而不是年龄
嵌入式的冷知识屋 blog.csdn.net/k_o_carnivist
回复

使用道具 举报

4

主题

5

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-2-23
在线时间
11 小时
发表于 2017-2-23 21:46:32 | 显示全部楼层
K.O.Carnivist 发表于 2016-9-30 22:57
楼主需要的波形是4个通道严格首位相接吗?

如果是的话,同时有癖不愿意用中断,可以试试这样:

请问楼主这个抓取波形的软件是什么
回复

使用道具 举报

3

主题

238

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1366
金钱
1366
注册时间
2016-5-26
在线时间
1698 小时
发表于 2017-3-2 13:39:39 | 显示全部楼层
aupoo 发表于 2017-2-23 21:46
请问楼主这个抓取波形的软件是什么

Saleae Logic
淘汰人的从来是工具而不是年龄
嵌入式的冷知识屋 blog.csdn.net/k_o_carnivist
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-10 02:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表