在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

CW32通用輸入輸出端口詳解

jf_pJlTbmA9 ? 來源:武漢芯源半導體 ? 作者:武漢芯源半導體 ? 2023-10-30 17:33 ? 次閱讀

GPIO的意思是通用輸入輸出端口,可通過軟件配置成輸入或者輸出端。即可以通過GPIO口輸出高低電平或者通過GPIO口讀入引腳狀態是高電平還是低電平。大部分引腳除了當GPIO使用外,還可以復用為外設功能引腳。如UART外設與其他硬件進行數據交互。

CW32L083的每組GPIO都有20個寄存器,除了基礎的配置寄存器、數據寄存器、位置位/清零寄存器、位清零寄存器、鎖定寄存器、復用功能寄存器外,還配置了位翻轉寄存器,中斷數字濾波寄存器等,讓操作更加快捷。同時提供完善的固件庫函數,方便工程師快速開發測試,增強可移植性。

GPIO端口可配置成8種工作模式

4種輸入模式

1.浮空輸入

2.輸入上拉

3.輸入下拉

4.模擬輸入

4種輸出模式

1.開漏輸出

2.推挽式輸出

3.開漏復用功能

4.推挽式復用功能

GPIO功能框圖

1668416298355446.png

初始化GPIO可使用void GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)函數,此函數在cw32l083_gpio.c中有詳細的配置,其中的第一個參數GPIO_TypeDef是一個結構體類型,在cw32l083.h中有詳細定義,包含著每組GPIO的20個寄存器。

typedefstruct{寫法DIR_f;//輸入輸出方向寄存器OPENDRAIN_f;//輸出模式寄存器PDR_f;//下拉電阻寄存器PUR_f;//上拉電阻寄存器AFRH_f;//復用功能寄存器高段AFRL_f;//復用功能寄存器低段ANALOG_f;//模擬數字配置寄存器RISEIE_f;//上升沿中斷使能寄存器FALLIE_f;//下降沿中斷使能寄存器HIGHIE_f;//高電平中斷使能寄存器LOWIE_f;//低電平中斷使能寄存器ISR_f;//中斷標志寄存器ICR_f;//中斷標志清除寄存器LCKR_f;//配置鎖定寄存器FILTER_f;//中斷數字濾波器配置寄存器IDR_f;//輸入數據寄存器ODR_f;//輸出數據寄存器BRR_f;//位清零寄存器BSRR_f;//位置位清零寄存器TOG_f;//位翻轉寄存器}GPIO_TypeDef;

第二個參數GPIO_InitTypeDef也是一個結構體,在cw32l083_gpio.h中可查看其定義。

typedefstruct{uint32_tPins;uint32_tMode;uint32_tIT;}GPIO_InitTypeDef;

下面舉一個簡單的例子配置一個IO口翻轉,可實現閃燈實驗。


int32_t main(void)

{

GPIO_InitTypeDef GPIO_InitStruct = {0};

RCC_HSI_Enable(RCC_HSIOSC_DIV6);

__RCC_GPIOC_CLK_ENABLE(); //打開GPIOC的時鐘

GPIO_InitStruct.IT = GPIO_IT_NONE;

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

GPIO_InitStruct.Pins = GPIO_PIN_2|GPIO_PIN_3;

GPIO_Init(CW_GPIOC, GPIO_InitStruct);

while (1)

{

GPIO_TogglePin(CW_GPIOC,GPIO_PIN_2|GPIO_PIN_3);

Delay(0xFFFF); //延遲函數

}

}

void Delay(__IO uint16_t nCount)

{

/* Decrement nCount value */

while (nCount != 0)

{

nCount--;

}

}

例程中使用PC02和PC03引腳進行IO口翻轉實驗,官方CW32L083VCT6的評估板上這兩個引腳外接LED燈,可以看到LED周期閃爍的效果。

其中CW_GPIOC,GPIO_PIN_0以及GPIO_MODE_OUTPUT_PP都是定義在頭文件中的宏定義,如下面第一行為CW_GPIOC端口地址映射。


#define CW_GPIOC ((GPIO_TypeDef*) GPIOC_BASE)

#define GPIOC_BASE 0x48000800UL

#define GPIO_PIN_0 ((uint16_t)0x0001) /* Pin 0 selected */

#define GPIO_PIN_1 ((uint16_t)0x0002) /* Pin 1 selected */

#define GPIO_PIN_2 ((uint16_t)0x0004) /* Pin 2 selected */

#define GPIO_PIN_3 ((uint16_t)0x0008) /* Pin 3 selected */

#define GPIO_PIN_4 ((uint16_t)0x0010) /* Pin 4 selected */

#define GPIO_PIN_5 ((uint16_t)0x0020) /* Pin 5 selected */

#define GPIO_PIN_6 ((uint16_t)0x0040) /* Pin 6 selected */

#define GPIO_PIN_7 ((uint16_t)0x0080) /* Pin 7 selected */

#define GPIO_PIN_8 ((uint16_t)0x0100) /* Pin 8 selected */

#define GPIO_PIN_9 ((uint16_t)0x0200) /* Pin 9 selected */

#define GPIO_PIN_10 ((uint16_t)0x0400) /* Pin 10 selected */

#define GPIO_PIN_11 ((uint16_t)0x0800) /* Pin 11 selected */

#define GPIO_PIN_12 ((uint16_t)0x1000) /* Pin 12 selected */

#define GPIO_PIN_13 ((uint16_t)0x2000) /* Pin 13 selected */

#define GPIO_PIN_14 ((uint16_t)0x4000) /* Pin 14 selected */

#define GPIO_PIN_15 ((uint16_t)0x8000) /* Pin 15 selected */

#define GPIO_PIN_All ((uint16_t)0xFFFF) /* All pins selected */

#define GPIO_MODE_ANALOG (0X00)

#define GPIO_MODE_INPUT (0x10)

#define GPIO_MODE_INPUT_PULLUP (0x11)

#define GPIO_MODE_INPUT_PULLDOWN (0x12)

#define GPIO_MODE_OUTPUT_PP (0x20)

#define GPIO_MODE_OUTPUT_OD (0x21)

上面的例子是使用庫函數配置的,也可以用寄存器操作,具體步驟如下。


//開啟HSI并6分頻,Sysclk=HCLK=PCLK=8MHz

CW_SYSCTRL->HSI=(5<

CW_SYSCTRL->CR1|=SYSCTRL_BYPASS|SYSCTRL_CR1_HSIEN_Msk; //Enable HSI

while ((CW_SYSCTRL->HSI SYSCTRL_HSI_STABLE_Msk) != SYSCTRL_HSI_STABLE_Msk) //Wait stable

{

;

}

//開啟GPIOC的時鐘

REGBITS_SET(CW_SYSCTRL->AHBEN, RCC_AHB_PERIPH_GPIOC);

//配置PC02和PC03為數字功能推挽輸出

CW_GPIOC->ANALOG_f.PIN2 = 0; //將PC02設置為數字功能

CW_GPIOC->DIR_f.PIN2 = 0; //將PC02設置成輸出模式

CW_GPIOC->OPENDRAIN_f.PIN2 = 0; //將PC02設置成推挽模式

CW_GPIOC->ANALOG_f.PIN3 = 0; //將PC03設置為數字功能

CW_GPIOC->DIR_f.PIN3 = 0; //將PC03設置為輸出模式

CW_GPIOC->OPENDRAIN_f.PIN3 = 0; //將PC03設置為推挽模式

while (1)

{

CW_GPIOC->TOG=bv2; //PC02翻轉

Delay(0xFFFF);

CW_GPIOC->TOG=bv3; //PC03翻轉

Delay(0xFFFF);

}

下面以CW32L083為例通過配置GPIO引腳來驅動SPI2外設,查閱CW32L083的用戶手冊可以得知, SPI2可以通過PA00,PA01,PA02,PA03復用實現,這個就是上文提到的GPIO口的復用功能。


PA00_AFx_SPI2MISO() //將PA00復用成SPI2的MISO線

PA01_AFx_SPI2MOSI() //將PA01復用成SPI2的MOSI線

PA02_AFx_SPI2SCK() //將PA02復用成SPI2的時鐘線

PA03_AFx_SPI2CS() //將PA03復用成SPI2的片選線,如需操作片選線,有特定函數

GPIO_InitTypeDef GPIO_InitStructure = {0};

GPIO_InitStructure.Pins =GPIO_PIN_1|GPIO_PIN_2 |GPIO_PIN_3;

GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;

GPIO_InitStructure.IT= GPIO_IT_NONE;

GPIO_Init(CW_GPIOA, GPIO_InitStructure);

GPIO_InitStructure.Pins =GPIO_PIN_0;

GPIO_InitStructure.Mode = GPIO_MODE_INPUT;

GPIO_Init(CW_GPIOA, GPIO_InitStructure);

另外我們的GPIO支持外部中斷,具體的配置如下,如果有不清楚的小伙伴可以查看下節CW32中斷控制器,會有詳細講解。


GPIO_InitTypeDef GPIO_InitStruct = {0};

__RCC_GPIOA_CLK_ENABLE();//開啟GPIOA的時鐘

GPIO_InitStruct.IT = GPIO_IT_RISING | GPIO_IT_FALLING; //上升沿或者下降沿觸發

GPIO_InitStruct.Mode = GPIO_MODE_INPUT;

GPIO_InitStruct.Pins =GPIO_PIN_1;

GPIO_Init(CW_GPIOA, GPIO_InitStruct);

//清除PA01中斷標志并使能NVIC

GPIOA_INTFLAG_CLR(bv1);

NVIC_EnableIRQ(GPIOA_IRQn);

上面的例程即可實現外部輸入中斷,PA01在接收到上升沿或者下降沿的信號的時候會進入到中斷函數中去執行相關的程序,具體的例程可以參考官方CW32L083的gpio_int_filter例子。

下面介紹的是CW32L083的GPIO所相關的函數及其功能。


1.void GPIO_SWD2GPIO(void);

將PA13/PA14 SWD設置成GPIO

2.void GPIO_GPIO2SWD(void);

將PA13/PA14設置成SWD

3.void GPIO_LockPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pins);

鎖定指定引腳配置項,可同時設置多個引腳

4.void GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pins);

GPIO去初始化,可同時設置多個引腳或單個引腳

5.void GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init);

GPIO 初始化,可同時設置多個引腳或單個引腳

6.void GPIO_ConfigFilter(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pins, uint32_t FltClk);

配置端口濾波

7.void GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pins, GPIO_PinState PinState);

設置指定引腳電平,可同時設置多個引腳

8.void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t Value);

設置指定引腳端口的輸出值

9.void GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pins);

翻轉指定引腳電平,可同時設置多個引腳

10.GPIO_PinState GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);

獲取一個引腳的電平

以上是CW32通用輸入輸出端口的介紹。

來源:武漢芯源半導體

審核編輯:湯梓紅

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

    關注

    31

    文章

    5363

    瀏覽量

    121162
  • 端口
    +關注

    關注

    4

    文章

    990

    瀏覽量

    32208
  • GPIO
    +關注

    關注

    16

    文章

    1216

    瀏覽量

    52378
收藏 人收藏

    評論

    相關推薦

    CW32移植Free-RTOS】CW32開發者扶持計劃

    CW32配置Free-RTOS全過程,CW32開發者扶持計劃
    的頭像 發表于 04-18 09:38 ?6230次閱讀
    【<b class='flag-5'>CW32</b>移植Free-RTOS】<b class='flag-5'>CW32</b>開發者扶持計劃

    通用輸入輸出端口GPIO配置說明

    【STM32F0系列學習】之—通用輸入輸出端口GPIO1、GPIO端口配置說明1、GPIO端口配置說明
    發表于 01-24 07:42

    CW32 通用輸入輸出端口

    10.GPIO_PinState GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);獲取一個引腳的電平以上是CW32通用輸入輸出端口
    發表于 11-02 11:12

    視頻打印機的輸入輸出

    視頻打印機的輸入輸出            輸入輸出指的是產品輸入輸出視頻信號的端口,比較常見
    發表于 12-31 10:38 ?1509次閱讀

    更高的帶寬! 說說筆記本的輸入輸出端口

    更高的帶寬! 說說筆記本的輸入輸出端口 Displayport端口將成為未來筆記本電腦的主流輸出端口。相對于目前主流的HDMI
    發表于 02-05 16:23 ?1574次閱讀

    STM32F2技術培訓_通用輸入輸出端口_GPIO

    STM32F2技術培訓_通用輸入輸出端口_GPIO
    發表于 12-03 17:34 ?0次下載

    F2產品技術培訓_8.通用輸入輸出端口(GPIO)

    F2產品技術培訓_8.通用輸入輸出端口(GPIO)
    發表于 03-15 14:43 ?11次下載

    MSP430教程Chapt6-通用輸入輸出

    本章首先介紹了MSP430最簡單的集成外圍設備之一——通用8位輸入輸出(GPIO)。輸入/輸出(I/O)端口可配置為可中斷或不可中斷。此外,
    發表于 05-07 09:05 ?4次下載
    MSP430教程Chapt6-<b class='flag-5'>通用</b><b class='flag-5'>輸入輸出</b>

    MCU通用輸入輸出端口(GPIO)輸出模式

    對于常規MCU,通用輸入輸出(GPIO)是其最基本、最常用的功能,用于實現最基本的數字量輸入輸出。 信號一般為:以3.3VDC為高電平的LTTL電平以5.0VDC為高電平的TTL電
    發表于 10-28 19:06 ?16次下載
    MCU<b class='flag-5'>通用</b><b class='flag-5'>輸入輸出</b><b class='flag-5'>端口</b>(GPIO)<b class='flag-5'>輸出</b>模式

    04、STM8通用輸入輸出口(GPIO)

    04、STM8通用輸入輸出口(GPIO)文章目錄04、STM8通用輸入輸出口(GPIO)1、概述2、GPIO主要功能3、I/O 的配置和使用3.1、
    發表于 11-26 15:21 ?9次下載
    04、STM8<b class='flag-5'>通用</b><b class='flag-5'>輸入輸出</b>口(GPIO)

    2、【STM32F0系列學習】之—通用輸入輸出端口(GPIO)

    【STM32F0系列學習】之—通用輸入輸出端口GPIO1、GPIO端口配置說明1、GPIO端口配置說明
    發表于 11-29 16:51 ?66次下載
    2、【STM32F0系列學習】之—<b class='flag-5'>通用</b><b class='flag-5'>輸入輸出</b><b class='flag-5'>端口</b>(GPIO)

    GPIO通用輸入輸出

    GPIO通用輸入輸出一、GPIO的功能概述用途:GPIO是通用輸入輸出(General Purpose I/O)的簡稱,主要用于工業現場需要用到數字量
    發表于 12-20 18:58 ?6次下載
    GPIO<b class='flag-5'>通用</b><b class='flag-5'>輸入輸出</b>

    CW32 PWM輸出功能介紹

    CW32 PWM輸出功能介紹
    的頭像 發表于 09-27 16:12 ?956次閱讀
    <b class='flag-5'>CW32</b> PWM<b class='flag-5'>輸出</b>功能介紹

    CW32定時器操作講解——輸入捕獲

    CW32定時器操作講解——輸入捕獲
    的頭像 發表于 09-27 16:06 ?1113次閱讀
    <b class='flag-5'>CW32</b>定時器操作講解——<b class='flag-5'>輸入</b>捕獲

    基于CW32的物聯網應用

    CW32】基于CW32的物聯網應用
    的頭像 發表于 11-02 15:55 ?868次閱讀
    基于<b class='flag-5'>CW32</b>的物聯網應用
    主站蜘蛛池模板: 久久久久久久久久久9精品视频 | 亚洲一区二区三区四区在线 | 国产色爽女小说免费看 | 免费看成年视频网页 | 亚洲成年人网 | 免费黄色小视频 | 国产免费高清视频在线观看不卡 | 一级片在线播放 | 丁香婷婷亚洲六月综合色 | 精品视频一区二区三区四区五区 | 99精品国产高清自在线看超 | 亚洲激情综合 | 五月天亚洲综合 | 色综合久久久久久久久五月性色 | 天天视频免费观看高清影视 | 色偷偷成人网免费视频男人的天堂 | 久久精品国波多野结衣 | 婷婷国产成人久久精品激情 | 美女被免费网站视频九色 | 88av在线看 | 午夜操操操 | 免费的两性视频网站 | 四虎影院黄色 | 亚洲视频入口 | 国产精品久久1024 | 狠狠躁夜夜躁人人爽天天miya | 四虎影城| 黑人破乌克兰美女处 | 欧美性色生活片天天看99 | 欧美日韩国产网站 | 欧美a一 | 丁香花在线视频观看免费 | 欧洲一级鲁丝片免费 | 日韩99| 久久久夜| 四虎最新永久在线精品免费 | 男人和女人做a免费视频 | 二级黄绝大片中国免费视频0 | 网址色| 一级骚片超级骚在线观看 | 香蕉视频色版在线观看 |