目录
一、用STM32F103输出一路PWM波形,建议采用定时器方法。
所用器材:野火Stm32F103指南者开发板
使用代码:野火自带的PWM输出波形工程文件
野火产品资料链接:
https://ebf-products.readthedocs.io/zh_CN/latest/
1.PWM简介
脉冲宽度调制是一种模拟控制方式,根据相应载荷的变化来调制晶体管基极或MOS管栅极的偏置,来实现晶体管或MOS管导通时间的改变,从而实现开关稳压电源输出的改变。
在野火资料包中打开高级定时器
找到工程文件
main.c
int main(void)
{
/* 高级定时器初始化 */
ADVANCE_TIM_Init();
while(1)
{
}
}
其他代码:
static void ADVANCE_TIM_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
// 输出比较通道
RCC_APB2PeriphClockCmd(ADVANCE_TIM_CH1_GPIO_CLK, ENABLE);
GPIO_InitStructure.GPIO_Pin = ADVANCE_TIM_CH1_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(ADVANCE_TIM_CH1_PORT, &GPIO_InitStructure);
// 输出互补通道
RCC_APB2PeriphClockCmd(ADVANCE_TIM_CH1N_GPIO_CLK, ENABLE);
GPIO_InitStructure.GPIO_Pin = ADVANCE_TIM_CH1N_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(ADVANCE_TIM_CH1N_PORT, &GPIO_InitStructure);
// 默认输出低电平
GPIO_ResetBits(ADVANCE_TIM_BKIN_PORT,ADVANCE_TIM_BKIN_PIN);
}
2.最终结果
二、用STM32F103的DAC功能完成输出一个周期2khz的正弦波(循环)。
要求:此波形驱动作用至蜂鸣器或喇叭,会呈现一个“滴…”的单音;
所用软件:音频编辑工具Audiotion、UltraEdit、 notepad++
实验代码:野火自带的的工程文件
野火产品资料链接:
https://ebf-products.readthedocs.io/zh_CN/latest/
1.DAC
数模转换器,又称D/A转换器,简称DAC,它是把数字量转变成模拟的器件。D/A转换器基本上由4个部分组成,即权电阻网络、运算放大器、基准电源和模拟开关。
2.修改周期计算
输出一个周期为2kHz的正弦波,通过计算公式,我们可以得到,一共需要3600个采样点
打开野火的资料包里的这个文件
这里我选择的时matlab脚本
将其修改为3600等份
在matlab上运行此程序其生成的点会保存至下面这个文件
然后将下面文件的生成的点复制到
main.c:
int main(void)
{
while(1)
{
DAC_Mode_Init();
}
}
3.连接设备
具体知识在野火资料库的pdf中可以找到
4.运行结果
可以听见滴滴的单音但声音很小。
三、将一段数字音频歌曲数据转换为模拟音频波形输出(循环)。
1.音频截取
利用软件https://pan.baidu.com/share/init?surl=1QOMjvzfAqC285FF8eFceg
提取码:7egp
使用auditionr软件打开一个音频,截取一段右键存储选区为
截取不要过长
利用上面所说的软件
在打开文件中放入刚才生成的文件然后选择生成代码
然后选择保存代码将其生成代码复制
可以看到这里的生成字节数
下面把复制好的代码如上面的实验一样弄到这数组里
2.运行结果
将hex文件烧录后开发板连接示波器后