RA8P1 Titan Board 开发板 GPT 使用说明
中文 | English
简介
在我们具体的应用场合中往往都离不开 timer 的使用,本例程主要介绍了如何在 Titan Board 上使用 GPT 设备。
FSP配置说明
FSP 配置使能 GPT7 为 PWM 模式:
并配置 Pins 使能 GPT7:
RT-Thread Settings配置
在配置中打开 PWM7 使能:
示例工程说明
本例程的源码位于/projects/Titan_basic_buzzer/src/buzzer.c
:
#include <rtthread.h>
#include <rtdevice.h>
#define PWM_DEV_NAME "pwm7" /* PWM设备名称 */
#define PWM_DEV_CHANNEL 0 /* PWM通道 */
struct rt_device_pwm *pwm_dev;
typedef struct
{
uint16_t freq; // 频率Hz
uint16_t duration; // 持续时间ms
} note_t;
note_t song[] =
{
{262,400}, {294,400}, {330,400}, {262,400}, // 1 2 3 1
{262,400}, {294,400}, {330,400}, {262,400}, // 1 2 3 1
{330,400}, {349,400}, {392,800}, // 3 4 5
{330,400}, {349,400}, {392,800}, // 3 4 5
{392,200}, {440,200}, {392,200}, {349,200}, {330,400}, {262,400}, // 5 6 5 4 3 1
{392,200}, {440,200}, {392,200}, {349,200}, {330,400}, {262,400}, // 5 6 5 4 3 1
{262,400}, {196,400}, {262,400}, {0,400}, // 1(低) 7(低) 1 高 休止
{262,400}, {196,400}, {262,400}, {0,400}, // 1 7 1 休止
};
static int buzzer_test(void)
{
pwm_dev = (struct rt_device_pwm *)rt_device_find(PWM_DEV_NAME);
if (!pwm_dev)
{
rt_kprintf("Cannot find PWM device %s\n", PWM_DEV_NAME);
return -1;
}
for (size_t i = 0; i < sizeof(song)/sizeof(song[0]); i++)
{
if (song[i].freq == 0)
{
rt_pwm_disable(pwm_dev, PWM_DEV_CHANNEL);
}
else
{
uint32_t period_ns = 1000000000 / song[i].freq; // ns
uint32_t pulse_ns = period_ns / 2; // 50%
rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period_ns, pulse_ns);
rt_pwm_enable(pwm_dev, PWM_DEV_CHANNEL);
}
rt_thread_mdelay(song[i].duration);
}
rt_pwm_disable(pwm_dev, PWM_DEV_CHANNEL);
return 0;
}
MSH_CMD_EXPORT(buzzer_test, Play song on buzzer);
编译&下载
RT-Thread Studio:在 RT-Thread Studio 的包管理器中下载 Titan Board 资源包,然后创建新工程,执行编译。
编译完成后,将开发板的 Jlink 接口与 PC 机连接,然后将固件下载至开发板。
运行效果
在串口终端输入 buzzer_sample 查看具体效果,蜂鸣器会发出一段旋律。