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

    浏览量

    6200
  • PWM波
    +关注

    关注

    0

    文章

    99

    浏览量

    16899
  • 定时器中断
    +关注

    关注

    0

    文章

    49

    浏览量

    11232
  • 呼吸灯
    +关注

    关注

    10

    文章

    110

    浏览量

    42769
  • RT-Thread
    +关注

    关注

    31

    文章

    1294

    浏览量

    40230
收藏 人收藏

    评论

    相关推荐

    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开发板试用】

    首先感谢发烧友、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

    C51编程15-中断篇(定时器中断2

    使用定时器/计数中断,需要将满足以下的条件。 1)中断总允许打开 EA = 1; 2中断源允
    发表于 11-23 17:51 6次下载
    C51编程15-<b class='flag-5'>中断</b>篇(<b class='flag-5'>定时器</b><b class='flag-5'>中断</b><b class='flag-5'>2</b>)

    STM32CubeMX_定时器中断_PWM

    中断PWM的使用. 仍用NUCLEO-F767ZI的板子, 使用定时器3的中断实现LED2(Blue, PB7)的翻转, 然后刚好LED
    发表于 12-05 13:51 13次下载
    STM32CubeMX_<b class='flag-5'>定时器</b><b class='flag-5'>中断</b>_<b class='flag-5'>PWM</b>

    RT-Thread文档_英飞凌 Psoc6-CY8CKIT-062S2-43012上手指南

    RT-Thread文档_英飞凌 Psoc6-CY8CKIT-062S2-43012 上手指南
    发表于 02-22 18:27 3次下载
    RT-Thread文档_<b class='flag-5'>英飞凌</b> <b class='flag-5'>Psoc6-CY8CKIT-062S2</b>-43012上手指南

    基于RT-Thread的家庭智能家居系统的控制平台设计

    这个系统是在英飞凌Psoc6-evaluationkit-062S2开发板的基础上,充分利用了RT-Thread实时操作系统强大的功能及丰富的软件生态,驱动ESP8266、OLED屏幕和DHT11模块等,实现温湿度的采集、中英文字符的显示和与中国移动OneNET平台的通信
    发表于 07-18 16:23 1055次阅读
    基于RT-Thread的家庭智能家居系统的控制平台设计

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

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

    如何设计一种基于PSOC6的人体交互式智能家居系统呢?

    Psoc6-evaluationkit-062S2 是 RT-Thread 联合英飞凌推出的一款集成 32 位双核 CPU 子系统( ARM Cortex-M4 和 ARM Cortex-M0
    的头像 发表于 07-28 16:02 1051次阅读
    如何设计一种基于<b class='flag-5'>PSOC6</b>的人体交互式智能家居系统呢?

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

    Psoc6-evaluationkit-062S2开发板使用DAP_LINK方式下载,开发板有两个芯片,其中一块芯片用作DAP_LINK下载,在安装好插件的前提下,可以直接通过DAP_TYPEC下载
    发表于 08-08 17:18 624次阅读
    <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 762次阅读
    RA<b class='flag-5'>2</b>E1<b class='flag-5'>定时器</b>带死区互补<b class='flag-5'>PWM</b><b class='flag-5'>中断</b>延时问题分析

    英飞凌测评英飞凌PSoC™ 62开发板试用报告-LCD ILI9341 8080 DEMO

    介绍 `Psoc6-evaluationkit-062S2` 是 RT-Thread 联合英飞凌推出的一款集成32位双核CPU子系统( ARM Cortex-M4 和 ARM Cortex-M0
    的头像 发表于 03-07 21:07 731次阅读
    【<b class='flag-5'>英飞凌</b><b class='flag-5'>测评</b>】<b class='flag-5'>英飞凌</b><b class='flag-5'>PSoC</b>™ 62开发板试用报告-LCD ILI9341 8080 DEMO

    基于PSOC6的智能环境监控系统

    本项目是基于PSOC6进行开发,它具有以下特性Psoc6-evaluationkit-062S2是RT-Thread联合英飞凌推出的一款集成32位双核CPU子系统(ARMCortex-M4
    的头像 发表于 01-07 19:54 128次阅读
    基于<b class='flag-5'>PSOC6</b>的智能环境监控系统