OpenEdv-开源电子网

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

用2个定时器播放WAV只有杂音

[复制链接]

1

主题

7

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
204
金钱
204
注册时间
2021-5-31
在线时间
16 小时
发表于 2021-6-3 11:49:44 | 显示全部楼层 |阅读模式
5金钱
定时器4设置为8000Hz,定时器3输出wav,这样做是对的吗,如果错了我该怎么做


#define TIMER4_InV    (2000) //65536-定时器4初值 2000=8kHz 363=44.1kHz
#define TIMER4_ReV    (2000) //65536-定时器4重载值
#define TIMER_PWM     (256) //65536-比较值(占空值) 8bit=256 16bit=65536

static int i=0;
void timer_init(void)
{
        TIMER234_BaseInitTypedef  TIM_TimeBaseStructure;
        TIMER234_OCInitTypedef    TIM_OCStructure;

        RCC_Sccm1_ClockCmd(RCC_SCCM1_TIMER4,ENABLE);//定时器4时钟使能  
        RCC_Sccm1_ClockCmd(RCC_SCCM1_TIMER3,ENABLE);//定时器3时钟使能  
        RCC_Sccm1_ClockCmd(RCC_SCCM1_GPIO,ENABLE);
       
        IO_FUN_Config(GPIO_P1,GPIO_Pin_2,GPIO_FUNCTION_AF3);//音频输出引脚P12

        TIM_TimeBaseStructure.Timer_Mode=TIMER_MODE;          //选择定时器模式
        TIM_TimeBaseStructure.Timer_Prescaler=PRESCALER_12;   //12分频
        TIM_TimeBaseStructure.Timer_Reload=RELOAD_Mode0;      //设置自动重载
        TIM_TimeBaseStructure.Timer_ReloadValue=(65536-TIMER4_ReV);  //设置定时器重装值
        TIM_TimeBaseStructure.Timer_IntValue=(65536-TIMER4_InV);                  //设置定时器初值
        TIMER234_TimeBaseInit(TIMER4,&TIM_TimeBaseStructure);

        TIMER234_ModeSel(TIMER3,TIMER_MODE);//选择定时器3为定时器模式
        TIMER234_SetPrescaler(TIMER3,PRESCALER_12);//12分频
        TIMER234_ReloadModeSel(TIMER3,RELOAD_Mode0);//开启自动重载0
        TIMER234_SetInitValue(TIMER3,65536-TIMER_PWM);//设置定时器初值
        TIMER234_ReloadValue(TIMER3,65536-TIMER_PWM);//设置定时器重载值
       
        TIM_OCStructure.Timer_OCMode=TIMER_OCMode_0;                 //比较模式0
        TIM_OCStructure.Timer_OutputState=TIMER_OutputState_Enable;  //比较输出使能
        TIM_OCStructure.Timer_OutputNState=TIMER_OutputNState_Enable;//互补比较输出使能
//        TIM_OCStructure.Timer_Pulse=TIMER_PWM;                       //比较值设置
        TIM_OCStructure.Timer_OCPolarity=TIMER_OCPolarity_Low;      //比较输出极性低到高
        TIM_OCStructure.Timer_OCNPolarity=TIMER_OCNPolarity_Low;          //互补比较输出极性高到底

        TIMER234_OC_CRCInit(TIMER3,&TIM_OCStructure);            //通道CRC输出使能配置
                
        IRQ_Enbale(IT_TIMER4);  //定时器4中断使能
        IRQ_Enbale(IT_ALL);     //总中断使能
}


void Interrupt_TIMER4 (void) interrupt 25     //TIMER4中断服务程序
{
        if(i<8900)
        {
                TIMER234_SetCompareValue(TIMER3,TIMER_Channel_CRC,(65536-wavdata[i]));
                i++;
        }
        else
        {
                i=0;
        }
       
        if(TIMER234_GetFlagStatus(TIMER4,TIMER_TF2)==1)//timer4溢出标志获取
        {
                TIMER234_ClearFlag(TIMER4,TIMER_TF2);
        }       
}



最佳答案

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

PWM本身输出位数就低,想听到好声音,得做不少优化。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2021-6-3 11:49:45 | 显示全部楼层
z931978704 发表于 2021-6-4 17:23
播放wav音频文件,放出来基本是噪音

PWM本身输出位数就低,想听到好声音,得做不少优化。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

7

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
204
金钱
204
注册时间
2021-5-31
在线时间
16 小时
 楼主| 发表于 2021-6-3 11:53:49 | 显示全部楼层
我用的51的MCU
&#61550; 操作条件
— 工作电压范围:1.8V ~ 5.0V — 工作温度范围:-40℃ ~ 85℃
&#61550; 低功耗特性(6 种模式)
— Deep sleep(5nA)
— Halt(5.5uA)
— Active Halt(5.7uA)
— Low Power Wait(75uA@32KHz)
— Low Popwer run(80uA@32KHz)
— wait(0.75mA@16MHz)
— 正常工作功耗:<4mA — Halt 模式快速唤醒时间:5us
&#61550; 高性能 8 位 8051 内核
— 主频为 32MHZ,可进行 2/4/32 分频,系
统默认工作频率 16MHz — 支持 30 路中断源
— 16bit 乘除法运算和 32/16bit 除法运算
&#61550; 复位和电源管理
— 支持 5 个档位可配的低功耗 BOR — 低功耗 POR/PDR — 可编程电压检测单元(PVD)
&#61550; 时钟管理
— 支持外部 16MHz 时钟
— 支持外部 32.768KHz 时钟
— 内置 32MHz 高速 RC 振荡器
— 内置 32KHz RC 振荡器
&#61550; 低功耗 RTC — 带有报警中断的日历
&#61550; 存储器
— 高达 8KB 的 SRAM — 程序存储器:64KB — 灵活的读写保护模式
&#61550; 12 位 ADC — 7 通道 12 位 ADC — 采样转换率高达 1MSPS
&#61550; 两路比较器
— 1 路固定阈值和 1 路轨到轨
— 带有唤醒功能
&#61550; 定时器
— 2 个 16 位基本定时器
— 1 个 16 位通用定时器带 3 个通道,支
持输入捕获/输出比较/PWM 生成
— 2 个 16 位高级定时器分别带 3 个通
道,支持输入捕获/输出比较/PWM 生
成,互补输出和刹车,支持电机驱动
— 内置独立看门狗定时器支持中断/复
位模式
&#61550; 通信接口
— ISO/IEC 7816-3 T0/T1 协议,支持多
种波特率
— 4 路 UART 接口
— 2 路 I
2C 主从机接口
— 4 路 SPI 主从机接口
&#61550; 安全特性
— 加 密 算 法 : SM4 /AES-128/ DES /
TDES — 1 路硬件真随机数发生器
— CRC8 校验
&#61550; 高达 40 个 I/O,都可以映射到中断向量
&#61550; 32bit UID
&#61550; 调试接口----JTAG 接口
&#61550; 软件支持
— Keil realview MD
回复

使用道具 举报

4

主题

456

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1072
金钱
1072
注册时间
2021-4-26
在线时间
352 小时
发表于 2021-6-3 18:50:45 | 显示全部楼层
帮顶  
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2021-6-4 00:58:11 | 显示全部楼层
PWM播放音乐?
回复

使用道具 举报

1

主题

7

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
204
金钱
204
注册时间
2021-5-31
在线时间
16 小时
 楼主| 发表于 2021-6-4 17:23:20 | 显示全部楼层

播放wav音频文件,放出来基本是噪音
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-22 23:58

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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