OpenEdv-开源电子网

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

分享一个stm32f103zet6生成任意频率正弦波和任意频率三角波

  [复制链接]

4

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
199
金钱
199
注册时间
2014-4-19
在线时间
41 小时
发表于 2016-5-9 17:03:36 | 显示全部楼层 |阅读模式
最近在弄这个,虽然代码不是自己写的,只是把网友的库函数版本改成了寄存器版本,但是使得这个的代码方便移植些吧。网友精练的代码使得在改的过程中也让我学会了很多。这里附上网友的原代码和我移植成的寄存器版本的代码。我的测试工程是在原子哥的串口实验工程的基础上改的。本来想@那位网友的,后来一直找不到原帖子,尴尬了...

STM32F103ZET6任意频率正弦波 三角波工程(寄存器版本).rar

349.17 KB, 下载次数: 4684

寄存器版本

TIM DAC DMA输出任意波形(网友)库函数版本.rar

4.11 MB, 下载次数: 36577

库函数版本

新手的路还很长
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
199
金钱
199
注册时间
2014-4-19
在线时间
41 小时
 楼主| 发表于 2017-2-26 10:23:44 | 显示全部楼层
jun4664 发表于 2016-12-19 13:57
非常感谢楼主的分享
请问一下怎么在C8T6上运行啊?我在ZET6运行可以,可是实际应用的板子是低成本的C8T6, ...

我没用过c8t6,但是,首先你得确定c8t6上是否有相关的硬件外设,比如DMA。如果相关的硬件外设都有,那调试程序你得从报错的信息上来下手了,分析问题解决问题。
新手的路还很长
回复 支持 0 反对 1

使用道具 举报

21

主题

2205

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5141
金钱
5141
注册时间
2014-8-26
在线时间
1317 小时
发表于 2016-5-9 18:00:20 | 显示全部楼层
谢谢分享,收藏了
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2016-5-9 18:41:12 | 显示全部楼层
谢谢分享!
回复 支持 反对

使用道具 举报

69

主题

978

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3772
金钱
3772
注册时间
2015-4-26
在线时间
765 小时
发表于 2016-5-9 19:35:00 | 显示全部楼层
标记,输出正弦波、三角波,感谢分享
我有故事,你有酒吗
回复 支持 反对

使用道具 举报

14

主题

1592

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
2622
金钱
2622
注册时间
2014-7-17
在线时间
350 小时
发表于 2016-5-10 00:01:40 | 显示全部楼层
MARK!!!
回复 支持 反对

使用道具 举报

28

主题

176

帖子

0

精华

高级会员

Rank: 4

积分
738
金钱
738
注册时间
2014-7-1
在线时间
180 小时
发表于 2016-5-10 11:18:48 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2016-5-10 11:21:39 | 显示全部楼层
谢谢分享
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

32

主题

286

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1366
金钱
1366
注册时间
2014-3-27
在线时间
358 小时
发表于 2016-5-31 09:41:58 | 显示全部楼层
谢谢分享,收藏一个。
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2016-6-7
在线时间
1 小时
发表于 2016-6-15 15:42:58 | 显示全部楼层
谢谢分享,还是有很多不懂的。
回复 支持 反对

使用道具 举报

2

主题

14

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
233
金钱
233
注册时间
2015-1-19
在线时间
9 小时
发表于 2016-7-16 23:49:32 | 显示全部楼层
我试了下,正弦波最多输出17KHZ啊。这个极限频率能不能改,现在我需要40KHZ的正弦波,有没有方法呢!谢谢
回复 支持 反对

使用道具 举报

13

主题

79

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
360
金钱
360
注册时间
2013-9-24
在线时间
75 小时
发表于 2016-7-20 20:56:23 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

10

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2016-7-14
在线时间
28 小时
发表于 2016-7-20 22:27:53 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2016-7-15
在线时间
2 小时
发表于 2016-8-11 09:57:22 | 显示全部楼层
谢谢分享!!
回复 支持 反对

使用道具 举报

9

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
122
金钱
122
注册时间
2011-9-15
在线时间
10 小时
发表于 2016-8-11 14:24:03 | 显示全部楼层
标记标记
回复 支持 反对

使用道具 举报

5

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2016-6-3
在线时间
21 小时
发表于 2016-8-17 15:38:54 | 显示全部楼层
MARKbiaojia \\
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2019-3-15
在线时间
23 小时
发表于 2016-8-23 11:42:09 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2016-10-7
在线时间
0 小时
发表于 2016-10-7 13:20:39 | 显示全部楼层
感谢楼主分享!   有个小bug哦 . .就是两个波形得同时开着 这样输出的频率才是自己设置的频率  问题在dac。c文件 的TIM定时器设置的最后几句话  大家看看就明白了   
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
43
金钱
43
注册时间
2014-11-12
在线时间
4 小时
发表于 2016-10-14 10:15:34 | 显示全部楼层
谢谢分享                           
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2014-1-9
在线时间
16 小时
发表于 2016-10-14 15:53:04 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

10

主题

65

帖子

0

精华

初级会员

Rank: 2

积分
106
金钱
106
注册时间
2016-4-16
在线时间
13 小时
发表于 2016-10-19 21:53:44 | 显示全部楼层
大哥在吗?我想用你的锯齿波改为只有一个周期的斜坡信号,改了好多天还没搞定,你会吗
回复 支持 反对

使用道具 举报

44

主题

298

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
209
金钱
209
注册时间
2016-9-9
在线时间
84 小时
发表于 2016-10-20 10:04:27 | 显示全部楼层
本帖最后由 dreamARM 于 2016-10-20 10:06 编辑

正弦波也是用定时器做的吗?         for( i=0;i<cycle;i++)
        {
                D=(u16)((Um*sin(( 1.0*i/(cycle-1))*2*PI)+Um)*4095/3.3);
        }


这个什么意思,能简单说下原理吗?
回复 支持 反对

使用道具 举报

6

主题

17

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
366
金钱
366
注册时间
2016-8-25
在线时间
61 小时
发表于 2016-10-21 10:11:24 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

9

主题

68

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
323
金钱
323
注册时间
2016-9-1
在线时间
78 小时
发表于 2016-10-22 16:25:22 | 显示全部楼层
这个可以调幅度吗   
回复 支持 反对

使用道具 举报

4

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
199
金钱
199
注册时间
2014-4-19
在线时间
41 小时
 楼主| 发表于 2016-10-24 15:24:12 | 显示全部楼层
dreamARM 发表于 2016-10-20 10:04
正弦波也是用定时器做的吗?         for( i=0;i

用这个函数弄出一个正弦波数据表
新手的路还很长
回复 支持 反对

使用道具 举报

4

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
199
金钱
199
注册时间
2014-4-19
在线时间
41 小时
 楼主| 发表于 2016-10-24 15:26:20 | 显示全部楼层
bosir 发表于 2016-10-19 21:53
大哥在吗?我想用你的锯齿波改为只有一个周期的斜坡信号,改了好多天还没搞定,你会吗

一个周期?即只产生一个周期?那就产生完一个周期的信号之后把TIM跟DMA关了不就好了
新手的路还很长
回复 支持 反对

使用道具 举报

4

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
199
金钱
199
注册时间
2014-4-19
在线时间
41 小时
 楼主| 发表于 2016-10-24 15:27:27 | 显示全部楼层
Scorpio 发表于 2016-10-7 13:20
感谢楼主分享!   有个小bug哦 . .就是两个波形得同时开着 这样输出的频率才是自己设置的频率  问题在dac。 ...

恩恩,谢谢指正
新手的路还很长
回复 支持 反对

使用道具 举报

4

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
199
金钱
199
注册时间
2014-4-19
在线时间
41 小时
 楼主| 发表于 2016-10-24 15:29:25 | 显示全部楼层

我记得这个幅值电压是有一个基准电压的,你可以看看那块,具体的我也忘记了,不好意思了
新手的路还很长
回复 支持 反对

使用道具 举报

10

主题

65

帖子

0

精华

初级会员

Rank: 2

积分
106
金钱
106
注册时间
2016-4-16
在线时间
13 小时
发表于 2016-10-30 15:41:09 | 显示全部楼层
脚叔 发表于 2016-10-24 15:26
一个周期?即只产生一个周期?那就产生完一个周期的信号之后把TIM跟DMA关了不就好了

我后面用延时函数就可以了
回复 支持 反对

使用道具 举报

11

主题

179

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1103
金钱
1103
注册时间
2016-7-19
在线时间
168 小时
发表于 2016-11-15 10:07:58 | 显示全部楼层
谢谢分享!!
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2016-12-19
在线时间
0 小时
发表于 2016-12-19 13:57:16 | 显示全部楼层
非常感谢楼主的分享
请问一下怎么在C8T6上运行啊?我在ZET6运行可以,可是实际应用的板子是低成本的C8T6,我改了C/C++,DEVICE,startup文件改为md,能编译但是不能输出波形,请问怎么解决呢?
回复 支持 反对

使用道具 举报

2

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
122
金钱
122
注册时间
2013-11-22
在线时间
40 小时
发表于 2017-3-24 15:57:45 | 显示全部楼层
本帖最后由 禽兽小强 于 2017-3-24 15:58 编辑

谢谢楼主,目前正在研究您的代码。另外,我想向您请教一下:
D=(u16)((Um*sin(( 1.0*i/(cycle-1))*2*PI)+Um)*4095/3.3);

我有几个小问题:
生成sine的值的方程为→sin(2πfn+θ),其中θ=0,n=i,
那么
1.  f是否为采用频率,即f=1/256?  cycle-1是为了从0开始?
2.  1.0*是为了把整数变成浮点数吗?

还请多多指教,指点迷津,感谢!
回复 支持 反对

使用道具 举报

2

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2014-8-8
在线时间
11 小时
发表于 2017-4-7 12:32:42 | 显示全部楼层
很棒!
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2016-7-28
在线时间
11 小时
发表于 2017-4-22 18:23:04 | 显示全部楼层
为什么我下载了打不开
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2017-3-23
在线时间
1 小时
发表于 2017-4-22 18:28:29 | 显示全部楼层
感谢分享
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2017-6-16
在线时间
2 小时
发表于 2017-6-20 16:46:37 | 显示全部楼层
很好的资料,感谢楼主分享
回复 支持 反对

使用道具 举报

8

主题

45

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
441
金钱
441
注册时间
2016-9-2
在线时间
59 小时
发表于 2017-7-17 15:59:51 | 显示全部楼层
楼主你好。我刚刚接触这一块。想问下如果我要修改频率的话,要在哪里修改?
回复 支持 反对

使用道具 举报

8

主题

45

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
441
金钱
441
注册时间
2016-9-2
在线时间
59 小时
发表于 2017-7-17 20:02:30 | 显示全部楼层
请问下。要把这个锯齿波改为三角波的话,要修改哪里?
回复 支持 反对

使用道具 举报

11

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
140
金钱
140
注册时间
2017-7-15
在线时间
23 小时
发表于 2017-7-17 21:46:26 | 显示全部楼层
为什么我打不开呀?
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2017-7-3
在线时间
21 小时
发表于 2017-7-21 18:43:27 | 显示全部楼层
dreamARM 发表于 2016-10-20 10:04
正弦波也是用定时器做的吗?         for( i=0;i

我理解的是,最近也在搞各种波,简单点说就是把正弦波的数据保存到一个指针变量D中,
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2017-5-19
在线时间
4 小时
发表于 2017-7-29 10:50:05 | 显示全部楼层
谢谢分享,请问有库函数版本吗~
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2017-5-19
在线时间
4 小时
发表于 2017-7-31 16:58:32 | 显示全部楼层
我是用STM32F103C8来调试这个库函数版本的程序,总是莫名进入中断,波形总是发不出来~
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2017-5-19
在线时间
4 小时
发表于 2017-7-31 17:01:17 | 显示全部楼层
SineWave_Init( SawToothWave ,10 ,ENABLE ,SinWave ,10 ,ENABLE);每次执行到这个地方就走到中断void HardFault_Handler(void)中去了~
回复 支持 反对

使用道具 举报

5

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
149
金钱
149
注册时间
2016-10-28
在线时间
41 小时
发表于 2017-7-31 18:07:50 | 显示全部楼层
make,这个很有用
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2018-4-11
在线时间
2 小时
发表于 2018-4-19 11:33:56 | 显示全部楼层
萨斯电电 发表于 2016-7-16 23:49
我试了下,正弦波最多输出17KHZ啊。这个极限频率能不能改,现在我需要40KHZ的正弦波,有没有方法呢!谢谢

=问一下,你是直接把p4和p5直接接到示波器产生的波形吗?
回复 支持 反对

使用道具 举报

20

主题

450

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4938
金钱
4938
注册时间
2017-7-6
在线时间
722 小时
发表于 2018-6-7 15:28:14 | 显示全部楼层
楼主,能产生20K到65K的正弦波吗?
比如我采255个点,要产生65K的正弦波,那么DA的输出频率是不是65000*255S/s=16.575MS/s?
我是小白,很白很白的小白!!!
回复 支持 反对

使用道具 举报

2

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2013-4-13
在线时间
8 小时
发表于 2018-7-9 20:28:07 | 显示全部楼层
这个好,mark
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
68
金钱
68
注册时间
2018-3-17
在线时间
17 小时
发表于 2018-7-17 19:01:53 | 显示全部楼层
多谢分享
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2018-6-9
在线时间
7 小时
发表于 2018-8-23 21:18:31 | 显示全部楼层
多谢分享
回复 支持 反对

使用道具 举报

5

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2017-7-3
在线时间
17 小时
发表于 2018-10-29 19:33:29 | 显示全部楼层
楼主,频率影响峰峰值的问题怎么解决呢?
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-23 15:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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