色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

PSOC6-GPIO的控制

互聯網電子設計 ? 來源:互聯網電子設計 ? 作者:互聯網電子設計 ? 2023-06-07 09:04 ? 次閱讀

GPIO是一種具有輸入和輸出功能的數字引腳,簡稱IO口。

IO口一般具有以下幾個功能模式:

  1. 輸入上拉:內部具有弱上拉,也就是高電平輸入模式。
  2. 輸入下拉:內部具有弱下拉,也就是低電平輸入模式。
  3. 輸入:只具有讀取io口電平功能,同時引腳懸空,容易被外部影響而改變電平狀態。
  4. 模擬輸入:輸入功能從數字變為模擬。
  5. 輸出:IO口具有輸出功能,高低電平的輸出。
  6. 推挽輸出:IO口利用功率管進行驅動、
  7. 開漏輸出:IO口的低電平具有輸出功能,而高電平則變為懸空,也就是隔離。
  8. 復用開漏輸出:將IO口交由外設處理開漏輸出。
  9. 復用推挽輸出:將IO口交由外設處理推挽輸出。

我們基于上一個項目所使用的demo繼續。

名稱 詳細
PIN_MODE_OUTPUT 0x00 輸出
PIN_MODE_INPUT 0x01 輸入
PIN_MODE_INPUT_PULLUP 0x02 輸入上拉
PIN_MODE_INPUT_PULLDOWN 0x03 輸入下拉
PIN_MODE_OUTPUT_OD 0x04 開漏輸出

我們開始初始化定時器吧!

#define HWTIMER_DEV_NAME   "time2"     /* 定時器名稱 */

/* 定時器超時回調函數 */
static rt_err_t timeout_cb(rt_device_t dev, rt_size_t size)
{
    rt_kprintf("this is hwtimer timeout callback fucntion!n");
    rt_kprintf("tick is :%d !n", rt_tick_get());

    return 0;
}

static int hwtimer_sample(void)
{
    rt_err_t ret = RT_EOK;
    rt_hwtimerval_t timeout_s;      /* 定時器超時值 */
    rt_device_t hw_dev = RT_NULL;   /* 定時器設備句柄 */
    rt_hwtimer_mode_t mode;         /* 定時器模式 */

    /* 查找定時器設備 */
    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);

    /* 設置模式為周期性定時器 */
    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 = 1000;     /* 微秒 */

    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);

    return ret;
}				

我們進入rtthead進行組件設置,打開time的組件和硬件使能即可!

pYYBAGR_VOSAazB8AAGUzYNAX9s810.png硬件定時器設置poYBAGR_VO2AYVAEAAG3tChAr90060.png驅動程序開啟

我們修改定時器回調函數的內容!

/* 定時器超時回調函數 */
static rt_err_t timeout_cb(rt_device_t dev, rt_size_t size)
{
    //rt_kprintf("this is hwtimer timeout callback fucntion!n");
    //rt_kprintf("tick is :%d !n", rt_tick_get());
    ledDelay++;
    if(ledDelay>=ledDelayVal){
        ledDelay=0;
        ledStatus=~ledStatus;
    }
    buttonShadeTime++;
    if(buttonShadeTime>=buttonShadeTimeVal){
        buttonShadeTime=0;
        buttonShadeFlag=1;
    }
    mnbn1S++;
    if(mnbn1S>=mnbn1SVal){
        mnbn1S=0;
        rt_kprintf("button is :%d !n", rt_pin_read(Button_PIN));
    }
    return 0;
}

我們添加方法:

#define LED_PIN     GET_PIN(0, 0)
#define Button_PIN  GET_PIN(5,0)
#define ledDelayVal 500
unsigned char buttonDownFlag=0;
unsigned char ledDownFlag=0;
unsigned short ledDelay=0;
unsigned char ledStatus=0;
#define buttonShadeTimeVal 10
unsigned char buttonShadeTime=0;
#define buttonShadeCountVal 5
unsigned char buttonShadeCount=0;
unsigned char buttonShadeFlag=0,buttonFinshFlag=0;
unsigned char buttonDownLast=0;
#define mnbn1SVal 1000
unsigned short mnbn1S=0;
#define HWTIMER_DEV_NAME   "time2"     /* 定時器名稱 */
void ButtonShadeHandler(void){
    if(!buttonShadeFlag){
           return;
    }
    buttonShadeFlag=0;
    if((!rt_pin_read(Button_PIN))==buttonDownLast){
        buttonShadeCount++;
        if(buttonShadeCount>=buttonShadeCountVal){
            buttonShadeCount=0;
            buttonFinshFlag=1;
        }
    }else{
        buttonDownLast=!rt_pin_read(Button_PIN);
        buttonShadeCount=0;
    }
}
void ButtonHandler(void){
    if(!buttonFinshFlag){
           return;
    }
    buttonFinshFlag=0;
    if(!buttonDownLast){
      if(!buttonDownFlag){
       buttonDownFlag=1;
       ledDownFlag=~ledDownFlag;
      }
   }else{
      buttonDownFlag=0;
   }
}

我們修改main方法為:

int main(void)
{
    rt_pin_mode(LED_PIN, PIN_MODE_OUTPUT);
    rt_pin_mode(Button_PIN, PIN_MODE_INPUT_PULLUP);
    hwtimer_sample();
    while(1)
    {
        ButtonShadeHandler();
        ButtonHandler();
        if(!ledDownFlag){
            if(!ledStatus){
                rt_pin_write(LED_PIN, PIN_HIGH);
            }else{
                rt_pin_write(LED_PIN, PIN_LOW);
            }
        }else{
            rt_pin_write(LED_PIN, PIN_HIGH);
        }

    }
}

運行效果:

點擊P5.0接口的button來實現主板的燈控制!按一下開始閃爍,按一下關。

pYYBAGR_XaiAZbwIAEFOSmfOCCQ381.png運行效果

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6037

    文章

    44563

    瀏覽量

    635876
  • GPIO
    +關注

    關注

    16

    文章

    1205

    瀏覽量

    52146
  • IO口
    +關注

    關注

    3

    文章

    170

    瀏覽量

    24058
  • psoc6
    +關注

    關注

    1

    文章

    9

    瀏覽量

    4865
收藏 人收藏

    評論

    相關推薦

    PSoC3內部模擬布線和管腳選擇

    本文是對PSoC3內部模擬布線和管腳選擇的一個簡單介紹,對PSoC3芯片設計規定的IDAC和Opamp直接連接到GPIO做了詳細的說明
    發表于 06-09 10:05 ?2257次閱讀
    <b class='flag-5'>PSoC</b>3內部模擬布線和管腳選擇

    賽普拉斯推出PSoC? 6 BLE Pioneer套件

    賽普拉斯今日宣布推出PSoC? 6 BLE Pioneer套件和PSoC Creator?4.2集成開發環境(IDE),使設計人員能夠利用PSoC
    的頭像 發表于 10-10 14:19 ?9948次閱讀

    【英飛凌PSoC 6】新建RTT工程

    介紹英飛凌PSoC 6 RTT開發板環境創建
    的頭像 發表于 04-24 15:29 ?1956次閱讀
    【英飛凌<b class='flag-5'>PSoC</b> <b class='flag-5'>6</b>】新建RTT工程

    請問如何將ECO輸出分配給PSoC6GPIO?

    如何將ECO輸出分配給PSoC6GPIO
    發表于 01-16 07:56

    PSoC? 6 CY8CPROTO-062-4343W如何配置GPIO和ADC引腳?

    嗨,我正在使用 PSoC? 6 CY8CPROTO-062-4343W,我正在嘗試測量 4 線電阻式觸摸屏。由于 4 線電阻式觸摸屏的工作原理,與某些引腳的連接會根據您是要讀取 x 軸還是 y 軸上
    發表于 01-18 09:23

    PSoc4上控制GPIO時,怎樣才能用modustoolBox為GPIO設置驅動模式?

    PSoc4 上控制 GPIO 時,我想為 GPIO 設置驅動模式。 在 PSoC Creator 中,可以在 “元器件目錄” 中選擇并放
    發表于 01-22 07:29

    PSOC6 GPIO無法觸發中斷的原因?怎么解決?

    Hi all: 我們現在的項目用PSOC6的GPIOp10.6 管腳連接其他芯片的INT管腳,通過示波器可以抓到該管腳上已經產生了500us左右的脈沖(INT腳一直高,脈沖來了會拉低500us
    發表于 02-02 08:01

    PSoC3_5 GPIO應用筆記

    PSoC3_5 GPIO應用筆記,在這里向讀者介紹PSoC 3和PSoC5個GPIO基礎,并展示他們如何在設計中有效地使用技術圖文并茂,挺容
    發表于 11-22 16:21

    按時如何在PSoC6中復用?

    你好,現在我用PSoC6通過UART連接其他的板。董事會只有四條線,即VCC,GND,RX(GPIO)和Tx(GPIO)。該板使用TX作為GPIO喚醒
    發表于 08-19 00:26

    PSOC5 GPIO奇怪行為

    在我的項目中,我使用PSoC5FTK。GPIO奇怪的行為已經被檢測到。兩個子系統,兩個問題。第一個紅外接收器,連接到P5〔1〕。在接收周期(RC6協議)中存在雪崩中斷Req,1000和更多。G
    發表于 03-14 13:25

    PSOC 4怎么在固件中控制GPIO?

    根據PSoC 4“使用GPIO引腳”,文檔端口4和更高(P4、P5、P6、P7等)不能用于通過DSI路由。要使用它們,必須直接控制在固件中。GPION固件我不清楚如何做到這一點,如果我
    發表于 10-08 13:50

    PSoC 1 使用外部微控制器對 PSoC? 1 器件編程 (HSSP)-AN44168

    PSoC 1 使用外部微控制器對 PSoC? 1 器件編程 (HSSP)-AN44168
    發表于 10-10 16:10 ?7次下載
    <b class='flag-5'>PSoC</b> 1 使用外部微<b class='flag-5'>控制</b>器對 <b class='flag-5'>PSoC</b>? 1 器件編程 (HSSP)-AN44168

    PSOC6核心板開源分享

    電子發燒友網站提供《PSOC6核心板開源分享.zip》資料免費下載
    發表于 07-27 10:29 ?4次下載
    <b class='flag-5'>PSOC6</b>核心板開源分享

    PSOC6的入門案例demo

    PSOC6的點燈初次體驗
    的頭像 發表于 06-07 09:03 ?893次閱讀
    <b class='flag-5'>PSOC6</b>的入門案例demo

    使用Psoc6的智能家居概念

    電子發燒友網站提供《使用Psoc6的智能家居概念.zip》資料免費下載
    發表于 06-26 09:56 ?0次下載
    使用<b class='flag-5'>Psoc6</b>的智能家居概念
    主站蜘蛛池模板: 国产又黄又硬又粗| 永久免费在线视频| 国产三级在线观看视频| 伊人久久大香线蕉影院95| 日本日本熟妇中文在线视频| 红色机尾快播| 粗暴玩烂货调教| 国产在线观看网址你懂得| 97国产露脸精品国产麻豆| 午夜性爽视频男人的天堂在线| 蜜桃最新网址| 交换娇妻呻吟声不停中文字幕| 第一次破女视频出血视频| 55夜色66夜亚洲精品播放| 亚洲欧美人成视频在线| 久久久久久久久a免费| 国产成人永久免费视频| 亚洲精品午夜aaa级久久久久| 青青操久久| 美女的避毛| 久久国产亚洲电影天堂| 国产午夜视频在线| 国产精品.XX视频.XXTV| 趁老师睡着吃她的奶水| 99精品国产电影| 在线成 人av影院| 亚洲免费在线视频观看| 亚洲 视频 在线 国产 精品| 神电影院午夜dy888我不卡| 欧美一区二区激情视频| 国产啪精品视频网免费| 成人免费小视频| yellow片高清视频免费看| 99re久久热在线视频| 中文字幕在线观看亚洲日韩| 一个人在线观看免费高清视频| 亚洲国产欧美在线看片| 亚洲成人网导航| 亚洲精品国偷拍电影自产在线| 香蕉视频国产精品| 鸭子玩富婆流白浆视频|