0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

英飛凌Psoc6-evaluationkit-062S2測評2_定時器中斷和PWM

冬至子 ? 來源:harry_oceana ? 作者:harry_oceana ? 2023-08-08 16:52 ? 次閱讀

定時器

使用定時器翻轉(zhuǎn)LED電平

使能TIM1

1.jpg

使用硬件定時器,使能定時器后,需要主動添加構(gòu)建

cyhal_pwm.c/cyhal_tcpwm_common.c/cy_tcpwm_counter.c 三個文件否則會出現(xiàn)函數(shù)未定義錯誤
#define LED_PIN1 GET_PIN(0, 0)
#define LED_PIN2 GET_PIN(0, 1)
#define HWTIMER_DEV_NAME "time1" /* 定時器名稱 /
rt_device_t hw_dev; /
定時器設(shè)備句柄 /
rt_hwtimer_mode_t mode; /
定時器模式 /
rt_uint32_t freq = 10000; /
計數(shù)頻率 /
/
定時器超時回調(diào)函數(shù) /
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; /
定時器設(shè)備句柄 /
rt_hwtimer_mode_t mode; /
定時器模式 /
rt_uint32_t freq = 10000; /
計數(shù)頻率 /
/
初始化LED引腳*/
rt_pin_mode(LED_PIN1, PIN_MODE_OUTPUT);
rt_pin_mode(LED_PIN2, PIN_MODE_OUTPUT);
/* 查找定時器設(shè)備 /
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;
}
/
以讀寫方式打開設(shè)備 /
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;
}
/
設(shè)置超時回調(diào)函數(shù) /
rt_device_set_rx_indicate(hw_dev, timeout_cb);
/
設(shè)置計數(shù)頻率(若未設(shè)置該項,默認為1Mhz 或 支持的最小計數(shù)頻率) /
rt_device_control(hw_dev, HWTIMER_CTRL_FREQ_SET, &freq);
/
設(shè)置模式為周期性定時器(若未設(shè)置,默認是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;
}
/
設(shè)置定時器超時值為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);
/
讀取定時器當(dāng)前值 */
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上實現(xiàn)呼吸燈效果
默認的pwm0只有通道3,沒有通道0,需要通過修改Kconfig文件來實現(xiàn)通道0

修改KCONFIG文件,增加PWM0通道0
PWM0通道0對應(yīng)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設(shè)備名稱 /
#define PWM_DEV_CHANNEL 0 /
PWM通道 */
struct rt_device_pwm pwm_dev; / PWM設(shè)備句柄 /
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 /
/
查找設(shè)備 */
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;
}
/
設(shè)置PWM周期和脈沖寬度默認值 /
rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse);
/
使能設(shè)備 /
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;
}
/
設(shè)置PWM周期和脈沖寬度 */
rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse);
}
}

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • LED電平
    +關(guān)注

    關(guān)注

    0

    文章

    5

    瀏覽量

    6200
  • PWM波
    +關(guān)注

    關(guān)注

    0

    文章

    99

    瀏覽量

    16903
  • 定時器中斷
    +關(guān)注

    關(guān)注

    0

    文章

    49

    瀏覽量

    11232
  • 呼吸燈
    +關(guān)注

    關(guān)注

    10

    文章

    110

    瀏覽量

    42769
  • RT-Thread
    +關(guān)注

    關(guān)注

    31

    文章

    1294

    瀏覽量

    40230
收藏 人收藏

    評論

    相關(guān)推薦

    PSoC6-CY8CKIT-062S2-43012開發(fā)板簡介

    簡介PSoC6-CY8CKIT-062S2-43012 是英飛凌推出的一款32位雙核CPU子系統(tǒng)( ARM Cortex-M4 和 ARM Cortex-M0)的開發(fā)板,具有單周期乘法
    發(fā)表于 10-14 11:08

    【資料下載】英飛凌PSoC 6 RTT物聯(lián)網(wǎng)開發(fā)板

    Psoc6-evaluationkit-062S2 是 RT-Thread 聯(lián)合英飛凌推出的一款集成32位雙核CPU子系統(tǒng)( ARM Cortex-M4 和 ARM Cortex-M0)的開發(fā)板,其具有單周期
    發(fā)表于 04-13 13:38

    英飛凌PSoC 6 RTT開發(fā)板試用】

    首先感謝發(fā)燒友、RT-Thread和英飛凌! 一、開箱 Psoc6-evaluationkit-062S2 是 RT-Thread 聯(lián)合英飛凌推出的一款集成32位雙核CPU子系統(tǒng)( ARM
    發(fā)表于 05-30 20:47

    英飛凌PSoC 6 RTT開發(fā)板試用】以搭積木方式實現(xiàn)簡單的互聯(lián)型家庭網(wǎng)關(guān)

    本文基于RT-Studio,采用搭積木的方式實現(xiàn)一個簡單的互聯(lián)型家庭網(wǎng)關(guān),采集各類傳感數(shù)據(jù)并傳輸至云端。硬件除了Psoc6-evaluationkit-062S2開發(fā)板之外,還有一塊RW007
    發(fā)表于 05-31 22:19

    英飛凌PSoC 6 RTT開發(fā)板試用】+開箱測試

    英飛凌PSoC 6 RTT開發(fā)板試用】+開箱測試 硬件資源介紹 Psoc6-evaluationkit-062S2 是 RT-Thread 聯(lián)合
    發(fā)表于 06-05 01:06

    C51編程15-中斷篇(定時器中斷2

    使用定時器/計數(shù)中斷,需要將滿足以下的條件。 1)中斷總允許打開 EA = 1; 2中斷源允
    發(fā)表于 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的中斷實現(xiàn)LED2(Blue, PB7)的翻轉(zhuǎn), 然后剛好LED
    發(fā)表于 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 上手指南
    發(fā)表于 02-22 18:27 ?3次下載
    RT-Thread文檔_<b class='flag-5'>英飛凌</b> <b class='flag-5'>Psoc6-CY8CKIT-062S2</b>-43012上手指南

    基于RT-Thread的家庭智能家居系統(tǒng)的控制平臺設(shè)計

    這個系統(tǒng)是在英飛凌Psoc6-evaluationkit-062S2開發(fā)板的基礎(chǔ)上,充分利用了RT-Thread實時操作系統(tǒng)強大的功能及豐富的軟件生態(tài),驅(qū)動ESP8266、OLED屏幕和DHT11模塊等,實現(xiàn)溫濕度的采集、中英文字符的顯示和與中國移動OneNET平臺的通信
    發(fā)表于 07-18 16:23 ?1055次閱讀
    基于RT-Thread的家庭智能家居系統(tǒng)的控制平臺設(shè)計

    基于PSOC6開發(fā)板構(gòu)建的智能小車

    本項目是基于Psoc6-evaluationkit-062S2開發(fā)板構(gòu)建的智能小車。該開發(fā)板由RT-Thread與英飛凌聯(lián)合推出,集成了一顆32位雙核CPU子系統(tǒng),包括150MHz的ARM
    發(fā)表于 07-28 15:14 ?821次閱讀
    基于<b class='flag-5'>PSOC6</b>開發(fā)板構(gòu)建的智能小車

    如何設(shè)計一種基于PSOC6的人體交互式智能家居系統(tǒng)呢?

    Psoc6-evaluationkit-062S2 是 RT-Thread 聯(lián)合英飛凌推出的一款集成 32 位雙核 CPU 子系統(tǒng)( ARM Cortex-M4 和 ARM Cortex-M0
    的頭像 發(fā)表于 07-28 16:02 ?1051次閱讀
    如何設(shè)計一種基于<b class='flag-5'>PSOC6</b>的人體交互式智能家居系統(tǒng)呢?

    英飛凌Psoc6-evaluationkit-062S2測評1_LED

    Psoc6-evaluationkit-062S2開發(fā)板使用DAP_LINK方式下載,開發(fā)板有兩個芯片,其中一塊芯片用作DAP_LINK下載,在安裝好插件的前提下,可以直接通過DAP_TYPEC下載
    發(fā)表于 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定時器帶死區(qū)互補PWM中斷延時問題分析

    RA2E1定時器帶死區(qū)互補PWM中斷延時問題分析
    的頭像 發(fā)表于 10-27 10:56 ?763次閱讀
    RA<b class='flag-5'>2</b>E1<b class='flag-5'>定時器</b>帶死區(qū)互補<b class='flag-5'>PWM</b><b class='flag-5'>中斷</b>延時問題分析

    英飛凌測評英飛凌PSoC? 62開發(fā)板試用報告-LCD ILI9341 8080 DEMO

    介紹 `Psoc6-evaluationkit-062S2` 是 RT-Thread 聯(lián)合英飛凌推出的一款集成32位雙核CPU子系統(tǒng)( ARM Cortex-M4 和 ARM Cortex-M0
    的頭像 發(fā)表于 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開發(fā)板試用報告-LCD ILI9341 8080 DEMO

    基于PSOC6的智能環(huán)境監(jiān)控系統(tǒng)

    本項目是基于PSOC6進行開發(fā),它具有以下特性Psoc6-evaluationkit-062S2是RT-Thread聯(lián)合英飛凌推出的一款集成32位雙核CPU子系統(tǒng)(ARMCortex-M4
    的頭像 發(fā)表于 01-07 19:54 ?142次閱讀
    基于<b class='flag-5'>PSOC6</b>的智能環(huán)境監(jiān)控系統(tǒng)