
天空之城的歌曲勾起我们不少人的童年回忆,听着这首歌有种冲动让我想用STM8做一首天空之城的主题曲出来,也好让我更好学习STM8和声音与频率的关系,真是一举两得啊! ![]() 最近我用覆铜板制作了一片STM8S003F3P6开发板, 这颗芯片不错才1块多,可以支持在线仿真,资源也比51好的多,而且非常人性化。先上图! ![]() 覆铜板如何制作PCB板,我就不展开描述了。都是用一些稀释剂,显影剂,脱模剂等等来弄的,其实网上说多少比多少分量,我个人不太在意,身为中国人就不会太在意这个,平时我们做菜下调味料也是看分量调,那些化学剂也是一样,反正增大浓度就提高正反应速率罢了,这是我是在高中学到的。 下面是原理图和PCB,实物做出来也不是太好,不过可以工作就可以了。 ![]() 下面就是我这次小玩意的主角,无源蜂鸣器,一定要选择无源的哦,因为我们是靠控制PWM来唱歌的。 蜂鸣器电路很简单加一个三极管就可以了,因为用于测试,电路很简陋,谈不上很好,当然可以加上二极管等更加稳定可靠。 ![]() ![]() 电路板和PCB --“肉体”都有了,那下面开始加入灵魂 --“代码”。我用的平台就是IAR for STM8,工程的大体就是这样 ![]() 要使用PWM当然要开启定时器的某个通道给它输出信号,那我使用的就是高级定时器1的channel1通道作为输出。这个道理对于我们来说那太简单了,不就是配置一下寄存器就好了吗,不过最大的问题就是我是音乐白痴啊,乐谱怎么看啊? 后来网上查了一些质料总算是把乐谱的基础知识搞明白。现在我会看简谱,5线谱还是不懂,那也不深究了。 我建议大家可以看简谱,大多就几种例如用do 就是1 但是又可以分为高音 中音 低音,分别是更具音符上面有没有一个点来确定。音符如果没有下很横行你可以定义为8拍,如果下面有一行少半拍就是4拍,两横就如此类推。不明白节拍,可以理解为多少拍就是把这个音符延时多少个时间段。 要使用音符当然要有相应的音符频率进行定义了,这些就是频率值了 ![]() 剩下就是如何写歌了, 这些都是我根据简谱一个个写的,感觉太累了 每一个音符包括三个byte的数据, 第一个数据就是代表数据是高音 中音 低音 第二个数据就是代表是什么音符 第三个当然就是节拍了,它决定了我们要把音符延时多少时间,这个你自己定,有人喜欢快节奏,有人喜欢慢节奏。 ![]() 歌曲和音符都有了,那下面我们就要配置一下TIM1的PWM输出了,这里我设置预分配输出50KHZ,为什么呢,因为如果设置比较小的话,输出信号不好,所以我建议可以设置比较大的输出,STM8最高16MHZ,一定满足你的要求,一般音符都是HZ级别 ![]() 下面就是要对音符进行转化了,就是切换音符了, 函数包括音符和对应的节拍 ![]() 程序是配置好了,但是老是不运作,查了几天都不知道为何,最终总算是配置出来了,原来啊,STM8还是有相应的option byte配置才能复用引脚,不像STM32那样配置好就跑。 ![]() AFR0可以设置为复用功能,才可以唱歌哦 ![]() 最后就是把电路用杜邦线链接起来了!这样美妙的音乐就可以唱起来了,有兴趣也试试。 ![]() |