MXCHIP+(3)Using PWM to generate audio
| |
| MX1081, STM32F20x, STM32Cube, STM32 HAL Driver |
| 本文档记录了使用STM32Cube的图形化配置工具STM32CubeMX来建立MX1081的MCU——STM32F20x,LQFP176的初始化代码,并使用固件库——STM32Cube F2来实现音频的生成和输出。。 |
Mars4zhu
目 录
插图索引
表格索引
错误!未找到目录项。
1 创建STM32CubeMX工程1.1. 选择MCU根据MX1081的Datasheet,我们得知MX1081内部MCU内核是STM32F20x LQFP176封装,1M Flash,但不知为205还是207哪一种,而且F2xx系列MCU都向下兼容,因此选择了F217 LQFP176的,1M-Flash的MCU。
1.2. 设置引脚功能从MX1081的Datasheet得知Core1081(核心板)的LED是PI9,因此我们在STM32CubeMX的PinOut中设置PI9为GPIO_Output,同时应该选择Sys中的SWD接口,此时STM32CubeMx自动将PA13、PA14设置为SWDIO、SWCLK功能。
file:///C:\Users\JamesChu\AppData\Local\Temp\ksohtml\wps9093.tmp.png
图 11 STM32CubeMX配置MX1081-MCU的系统引脚
最重要的当然是采用PWM输出引脚。使用PA2作为TIM2的channal3的PWM输出引脚。
图 12 STM32CubeMX配置MX1081-MCU的PWM引脚
1.3. 设置MCU运行时钟在STM32CubeMX的Clock Configuration,这里选择了MCU的HSI内部高速时钟,并采用PLL对其倍频到最大频率,如下图:
file:///C:\Users\JamesChu\AppData\Local\Temp\ksohtml\wps90E3.tmp.png
图 13 STM32CubeMX配置MX1081-MCU的时钟
1.4. 设置MCU外设初始化模式在STM32CubeMX的Configuration,设置MX1081的PWM初始化参数,如下图:
图 14 STM32CubeMX配置MX1081-MCU的PWM初始化
1.5. 设置工程参数和代码生成在STM32CubeMX菜单栏的Project-->Project Settings里面,配置工程生成的目录、工具链、代码生成的库引用/复制、用户代码的保留等功能。如下图:
file:///C:\Users\JamesChu\AppData\Local\Temp\ksohtml\wps9105.tmp.png
图 15 STM32CubeMX配置MX1081-MCU的功能参数
1.6. 生成代码和工程项目文件最后点击菜单栏的Project-->Generate Code,则STM32CubeMX自动生成了对应的目录,并添加相应的库文件或引用到工程中。
2 增加用户代码,输出Audio音频2.1. 生成音频数据为了生成音频数据,使用了一个wave文件转成C文件的工具软件wav2c。该软件读取.wav文件中的音频数据,然后生成C代码。
file:///C:\Users\JamesChu\AppData\Local\Temp\ksohtml\wps9115.tmp.png
图 21 使用WAV2C生成音频数据的C文件
2.2. 添加用户代码在STMCubeMX生成的代码里,main函数分别调用几个初始化函数(也是自动生成)后,MCU的引脚、外设就进入了我们设置的状态。因此直接在后面添加简单的用户代码即可,如下:
static float volumn = 1.0f;
void HAL_SYSTICK_Callback()
{
uint8_t DAC_Value = audio_data[HAL_GetTick()%audio_data_len]/volumn;
HAL_DAC_SetValue(&hdac, DAC_CHANNEL_1, DAC_ALIGN_8B_R, DAC_Value);
DAC_Value = audio_data2[HAL_GetTick()%audio_data_len2]/volumn;
HAL_DAC_SetValue(&hdac, DAC_CHANNEL_2, DAC_ALIGN_8B_R, 0xFF-DAC_Value);
TIM2->CCR3 = DAC_Value;
}
/* USER CODE END 4 */
以上代码使用systick中断来更新PWM的数据。这是systick应设置为音频数据的同样的采样率。
3 运行效果使用Jlink下载后,连接open1081的analog-module到PA4,可以听到音频声音。
在Keil中修改Volume的值,可以改变音量。
file:///C:\Users\JamesChu\AppData\Local\Temp\ksohtml\wps9135.tmp.png
图 31 MX1081-MCU的音频输出效果图
跟DAC输出音频的都一样。 只是感觉PWM的音质更好。就不在重复上传视频了。
4 总结STM32Cube提供了固件库,用户可直接调用固件库函数来开发,并且可以很好的实现STM32-MCU全系列的代码一致性。同时STM32CubeMX工具提供的可视化引脚、外设、时钟等配置功能,可以帮助快速完成工程的建立、初始化。大大降低了开发者的工作量。
经过实测,使用PWM比DAC可以提供更好的音质输出。
版本历史(Revision History)