0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

英飞凌Psoc6-evaluationkit-062S2测评2_定时器中断和PWM

冬至子 来源:harry_oceana 作者:harry_oceana 2023-08-08 16:52 次阅读

定时器

使用定时器翻转LED电平

使能TIM1

1.jpg

使用硬件定时器,使能定时器后,需要主动添加构建

cyhal_pwm.c/cyhal_tcpwm_common.c/cy_tcpwm_counter.c 三个文件否则会出现函数未定义错误
#define LED_PIN1 GET_PIN(0, 0)
#define LED_PIN2 GET_PIN(0, 1)
#define HWTIMER_DEV_NAME "time1" /* 定时器名称 /
rt_device_t hw_dev; /
定时器设备句柄 /
rt_hwtimer_mode_t mode; /
定时器模式 /
rt_uint32_t freq = 10000; /
计数频率 /
/
定时器超时回调函数 /
static rt_err_t timeout_cb(rt_device_t dev, rt_size_t size)
{
static uint8_t state = 0;
if (state == 0)
{
state = 1;
rt_pin_write(LED_PIN1, PIN_HIGH);
rt_pin_write(LED_PIN2, PIN_LOW);
}
else {
state = 0;
rt_pin_write(LED_PIN2, PIN_HIGH);
rt_pin_write(LED_PIN1, PIN_LOW);
}
rt_kprintf("this is hwtimer timeout callback fucntion!n");
rt_kprintf("tick is :%d !n", rt_tick_get());
return 0;
}
int main(void)
{
rt_err_t ret = RT_EOK;
rt_hwtimerval_t timeout_s; /
定时器超时值 /
rt_device_t hw_dev = RT_NULL; /
定时器设备句柄 /
rt_hwtimer_mode_t mode; /
定时器模式 /
rt_uint32_t freq = 10000; /
计数频率 /
/
初始化LED引脚*/
rt_pin_mode(LED_PIN1, PIN_MODE_OUTPUT);
rt_pin_mode(LED_PIN2, PIN_MODE_OUTPUT);
/* 查找定时器设备 /
hw_dev = rt_device_find(HWTIMER_DEV_NAME);
if (hw_dev == RT_NULL)
{
rt_kprintf("hwtimer sample run failed! can't find %s device!n", HWTIMER_DEV_NAME);
return RT_ERROR;
}
/
以读写方式打开设备 /
ret = rt_device_open(hw_dev, RT_DEVICE_OFLAG_RDWR);
if (ret != RT_EOK)
{
rt_kprintf("open %s device failed!n", HWTIMER_DEV_NAME);
return ret;
}
/
设置超时回调函数 /
rt_device_set_rx_indicate(hw_dev, timeout_cb);
/
设置计数频率(若未设置该项,默认为1Mhz 或 支持的最小计数频率) /
rt_device_control(hw_dev, HWTIMER_CTRL_FREQ_SET, &freq);
/
设置模式为周期性定时器(若未设置,默认是HWTIMER_MODE_ONESHOT)/
mode = HWTIMER_MODE_PERIOD;
ret = rt_device_control(hw_dev, HWTIMER_CTRL_MODE_SET, &mode);
if (ret != RT_EOK)
{
rt_kprintf("set mode failed! ret is :%dn", ret);
return ret;
}
/
设置定时器超时值为5s并启动定时器 /
timeout_s.sec = 0; /
/
timeout_s.usec = 100000; /
微秒 /
if (rt_device_write(hw_dev, 0, &timeout_s, sizeof(timeout_s)) != sizeof(timeout_s))
{
rt_kprintf("set timeout value failedn");
return RT_ERROR;
}
/
延时3500ms /
rt_thread_mdelay(3500);
/
读取定时器当前值 */
rt_device_read(hw_dev, 0, &timeout_s, sizeof(timeout_s));
rt_kprintf("Read: Sec = %d, Usec = %dn", timeout_s.sec, timeout_s.usec);
for(;;)
return 0;
}
PWM
在led0上实现呼吸灯效果
默认的pwm0只有通道3,没有通道0,需要通过修改Kconfig文件来实现通道0

修改KCONFIG文件,增加PWM0通道0
PWM0通道0对应LED1

1.jpg

使能pwm0 CH0

1.jpg

在drv_pwm.h中添加通道信息

1.jpg

#define LED_PIN GET_PIN(0, 0)
#define PWM_DEV_NAME "pwm0" /* PWM设备名称 /
#define PWM_DEV_CHANNEL 0 /
PWM通道 */
struct rt_device_pwm pwm_dev; / PWM设备句柄 /
int main(void)
{
// rt_pin_mode(LED_PIN, PIN_MODE_OUTPUT);
rt_uint32_t period, pulse, dir;
period = 500000; /
周期为0.5ms,单位为纳秒ns /
dir = 1; /
PWM脉冲宽度值的增减方向 /
pulse = 0; /
PWM脉冲宽度值,单位为纳秒ns /
/
查找设备 */
pwm_dev = (struct rt_device_pwm )rt_device_find(PWM_DEV_NAME);
if (pwm_dev == RT_NULL)
{
rt_kprintf("pwm sample run failed! can't find %s device!n", PWM_DEV_NAME);
return RT_ERROR;
}
/
设置PWM周期和脉冲宽度默认值 /
rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse);
/
使能设备 /
rt_pwm_enable(pwm_dev, PWM_DEV_CHANNEL);
while (1)
{
rt_thread_mdelay(50);
if (dir)
{
pulse += 12500; /
从0值开始每次增加5000ns /
}
else
{
pulse -= 12500; /
从最大值开始每次减少5000ns /
}
if (pulse >= period)
{
dir = 0;
}
if (0 == pulse)
{
dir = 1;
}
/
设置PWM周期和脉冲宽度 */
rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse);
}
}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • LED电平
    +关注

    关注

    0

    文章

    5

    浏览量

    6167
  • PWM波
    +关注

    关注

    0

    文章

    98

    浏览量

    16706
  • 定时器中断
    +关注

    关注

    0

    文章

    46

    浏览量

    11029
  • 呼吸灯
    +关注

    关注

    9

    文章

    107

    浏览量

    42482
  • RT-Thread
    +关注

    关注

    31

    文章

    1150

    浏览量

    38909
收藏 人收藏

    评论

    相关推荐

    PWM定时器

    一、PWM定时器1. S5PV210内部共有5个32bit的PWM定时器PWM
    发表于 07-23 08:19

    定时器中断PWM的使用

    中断PWM的使用. 仍用NUCLEO-F767ZI的板子, 使用定时器3的中断实现LED2(Blue, PB7)的翻转, 然后刚好LED
    发表于 08-13 06:59

    stm32之定时器中断

    文章目录定时器中断定时器中断相关寄存定时器中断库函数定时器
    发表于 08-19 07:25

    NUC980开发板之定时器Timer与PWM测评资料分享

    捕捉引脚实现间隔测量。特性(1)6个32位定时器,每个定时器具有一个24位的增计数和一个8位的预分配计数;(
    发表于 06-09 10:02

    PSoC6-CY8CKIT-062S2-43012开发板简介

    简介PSoC6-CY8CKIT-062S2-43012 是英飞凌推出的一款32位双核CPU子系统( ARM Cortex-M4 和 ARM Cortex-M0)的开发板,具有单周期乘法
    发表于 10-14 11:08

    【资料下载】英飞凌PSoC 6 RTT物联网开发板

    Psoc6-evaluationkit-062S2 是 RT-Thread 联合英飞凌推出的一款集成32位双核CPU子系统( ARM Cortex-M4 和 ARM Cortex-M0)的开发板,其具有单周期
    发表于 04-13 13:38

    【新品试用】英飞凌PSoC 6 RTT开发板试用活动

    Psoc6-evaluationkit-062S2是 RT-Thread 联合英飞凌推出的一款集成32位双核CPU子系统( ARM Cortex-M4 和 ARM Cortex-M0)的开发板,其具有单周期乘法
    发表于 04-13 15:26

    英飞凌PSoC 6 RTT开发板试用】

    首先感谢发烧友、RT-Thread和英飞凌! 一、开箱 Psoc6-evaluationkit-062S2 是 RT-Thread 联合英飞凌推出的一款集成32位双核CPU子系统( ARM
    发表于 05-30 20:47

    英飞凌PSoC 6 RTT开发板试用】以搭积木方式实现简单的互联型家庭网关

    本文基于RT-Studio,采用搭积木的方式实现一个简单的互联型家庭网关,采集各类传感数据并传输至云端。硬件除了Psoc6-evaluationkit-062S2开发板之外,还有一块RW007
    发表于 05-31 22:19

    英飞凌PSoC 6 RTT开发板试用】+开箱测试

    英飞凌PSoC 6 RTT开发板试用】+开箱测试 硬件资源介绍 Psoc6-evaluationkit-062S2 是 RT-Thread 联合
    发表于 06-05 01:06

    stm32定时器中断程序

    STM32的定时器是个强大的模块,定时器使用的频率也是很高的,定时器可以做一些基本的定时,还可以做PWM输出或者输入捕获功能。 以下是进行s
    发表于 10-12 16:59 1.3w次阅读

    STM32CubeMX_定时器中断_PWM

    文章目录前言STM32CubeMX新建工程基本定时器配置生成代码定时器中断PWM配置工程代码前言STM32CubeMX_环境搭建_GPIO_外部中断
    发表于 12-05 13:51 13次下载
    STM32CubeMX_<b class='flag-5'>定时器</b><b class='flag-5'>中断</b>_<b class='flag-5'>PWM</b>

    基于PSOC6开发板构建的智能小车

    本项目是基于Psoc6-evaluationkit-062S2开发板构建的智能小车。该开发板由RT-Thread与英飞凌联合推出,集成了一颗32位双核CPU子系统,包括150MHz的ARM
    发表于 07-28 15:14 511次阅读
    基于<b class='flag-5'>PSOC</b>6开发板构建的智能小车

    英飞凌Psoc6-evaluationkit-062S2测评1_LED

    Psoc6-evaluationkit-062S2开发板使用DAP_LINK方式下载,开发板有两个芯片,其中一块芯片用作DAP_LINK下载,在安装好插件的前提下,可以直接通过DAP_TYPEC下载
    发表于 08-08 17:18 349次阅读
    <b class='flag-5'>英飞凌</b><b class='flag-5'>Psoc6-evaluationkit-062S2</b><b class='flag-5'>测评</b>1_LED

    RA2E1定时器带死区互补PWM中断延时问题分析

    RA2E1定时器带死区互补PWM中断延时问题分析
    的头像 发表于 10-27 10:56 400次阅读
    RA2E1<b class='flag-5'>定时器</b>带死区互补<b class='flag-5'>PWM</b><b class='flag-5'>中断</b>延时问题分析