主题中讨论的其他器件:BOOSTXL-AUDIO、 SysConfig
您好!
此处提供了分步指南、展示了如何使用 PWM 示例生成类似警报的声音。
该示例基于 F3 SDK 7.20.00.29。
BOOSTXL-AUDIO 用于将 PWM 转换成声音(也可以考虑使用其他硬件)。
1-通过将此 zip 文件的内容复制粘贴到 SDK 安装中来应用 PWM 补丁(仅适用于 SDK 7.20.00.29) /cfs-file/__key/communityserver-discussions-components-files/538/7532.pwm_5F00_patch.zip
如果尚未完成、请打开 CCS、创建一个工作区并将其配置为使用 FreeRTOS。
3 -从 SDK 导入空项目。 为了保持完整性、生成一次项目。
4 -在项目中复制文件 PWM.c、PWM.h、PWMTimerLPF3.c、PWMTimerLPF3.h。 这些文件位于您要保存到 \source\ti\drivers。

5-在 SysConfig 中配置 PWM 驱动程序。 请注意、我们启用 PWM 信号及其互补通道(即使此处未使用)。

完成后、保存并关闭 SysConfig。
修改代码以使用 PWM 驱动程序。 我主要使用了 pwm.h 中提供的代码片段。
所有更改都在 empty.c 文件中进行(内容应用于替换 empty.c 的内容)
/*
* ======== empty.c ========
*/
/* For usleep() */
#include <unistd.h>
#include <stdint.h>
#include <stddef.h>
/* Driver Header files */
#include <ti/drivers/GPIO.h>
#include <ti/drivers/PWM.h>
/* Driver configuration */
#include "ti_drivers_config.h"
/*
* ======== mainThread ========
*/
void *mainThread(void *arg0)
{
/* 10 ms delay */
uint32_t time = 10000; //us
const uint32_t PWM_PERIOD_MIN = 1000; //1kHz
const uint32_t PWM_PERIOD_MAX = 8000; //8kHz
const uint32_t PWM_PERIOD_STEP = 10; //10Hz
int pwmIncrement = PWM_PERIOD_STEP;
uint32_t pwmPeriodValue = PWM_PERIOD_MIN;
/* Call driver init functions */
GPIO_init();
/* Configure the LED pin */
GPIO_setConfig(CONFIG_GPIO_LED_0, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);
/* Turn on user LED */
GPIO_write(CONFIG_GPIO_LED_0, CONFIG_GPIO_LED_ON);
PWM_Handle pwm;
PWM_Params pwmParams;
PWM_init();
PWM_Params_init(&pwmParams);
pwmParams.idleLevel = PWM_IDLE_LOW;
pwmParams.periodUnits = PWM_PERIOD_HZ;
pwmParams.periodValue = 1000;
pwmParams.dutyUnits = PWM_DUTY_FRACTION;
pwmParams.dutyValue = (uint32_t) (((uint64_t) PWM_DUTY_FRACTION_MAX * 50) / 100); // 50% duty cycle
pwm = PWM_open(CONFIG_PWM_0, &pwmParams);
PWM_start(pwm);
if (pwm == NULL) {
// PWM_open() failed
while (1);
}
while (1)
{
usleep(time);
GPIO_toggle(CONFIG_GPIO_LED_0);
pwmPeriodValue += pwmIncrement;
if(pwmPeriodValue < PWM_PERIOD_MIN)
{
pwmIncrement = PWM_PERIOD_STEP;
pwmPeriodValue += pwmIncrement;
}
else if(pwmPeriodValue > PWM_PERIOD_MAX)
{
pwmIncrement = -PWM_PERIOD_STEP;
pwmPeriodValue += pwmIncrement;
}
PWM_setPeriod(pwm, pwmPeriodValue);
}
}
7-构建并运行代码
8-结果:


我希望这将有所帮助、
此致、