欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

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

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

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

CW32通用輸入輸出端口詳解

jf_pJlTbmA9 ? 來(lái)源:武漢芯源半導(dǎo)體 ? 作者:武漢芯源半導(dǎo)體 ? 2023-10-30 17:33 ? 次閱讀

GPIO的意思是通用輸入輸出端口,可通過(guò)軟件配置成輸入或者輸出端。即可以通過(guò)GPIO口輸出高低電平或者通過(guò)GPIO口讀入引腳狀態(tài)是高電平還是低電平。大部分引腳除了當(dāng)GPIO使用外,還可以復(fù)用為外設(shè)功能引腳。如UART外設(shè)與其他硬件進(jìn)行數(shù)據(jù)交互。

CW32L083的每組GPIO都有20個(gè)寄存器,除了基礎(chǔ)的配置寄存器、數(shù)據(jù)寄存器、位置位/清零寄存器、位清零寄存器、鎖定寄存器、復(fù)用功能寄存器外,還配置了位翻轉(zhuǎn)寄存器,中斷數(shù)字濾波寄存器等,讓操作更加快捷。同時(shí)提供完善的固件庫(kù)函數(shù),方便工程師快速開(kāi)發(fā)測(cè)試,增強(qiáng)可移植性。

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

4種輸入模式

1.浮空輸入

2.輸入上拉

3.輸入下拉

4.模擬輸入

4種輸出模式

1.開(kāi)漏輸出

2.推挽式輸出

3.開(kāi)漏復(fù)用功能

4.推挽式復(fù)用功能

GPIO功能框圖

1668416298355446.png

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

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

第二個(gè)參數(shù)GPIO_InitTypeDef也是一個(gè)結(jié)構(gòu)體,在cw32l083_gpio.h中可查看其定義。

typedefstruct{uint32_tPins;uint32_tMode;uint32_tIT;}GPIO_InitTypeDef;

下面舉一個(gè)簡(jiǎn)單的例子配置一個(gè)IO口翻轉(zhuǎn),可實(shí)現(xiàn)閃燈實(shí)驗(yàn)。


int32_t main(void)

{

GPIO_InitTypeDef GPIO_InitStruct = {0};

RCC_HSI_Enable(RCC_HSIOSC_DIV6);

__RCC_GPIOC_CLK_ENABLE(); //打開(kāi)GPIOC的時(shí)鐘

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); //延遲函數(shù)

}

}

void Delay(__IO uint16_t nCount)

{

/* Decrement nCount value */

while (nCount != 0)

{

nCount--;

}

}

例程中使用PC02和PC03引腳進(jìn)行IO口翻轉(zhuǎn)實(shí)驗(yàn),官方CW32L083VCT6的評(píng)估板上這兩個(gè)引腳外接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)

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


//開(kāi)啟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

{

;

}

//開(kāi)啟GPIOC的時(shí)鐘

REGBITS_SET(CW_SYSCTRL->AHBEN, RCC_AHB_PERIPH_GPIOC);

//配置PC02和PC03為數(shù)字功能推挽輸出

CW_GPIOC->ANALOG_f.PIN2 = 0; //將PC02設(shè)置為數(shù)字功能

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

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

CW_GPIOC->ANALOG_f.PIN3 = 0; //將PC03設(shè)置為數(shù)字功能

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

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

while (1)

{

CW_GPIOC->TOG=bv2; //PC02翻轉(zhuǎn)

Delay(0xFFFF);

CW_GPIOC->TOG=bv3; //PC03翻轉(zhuǎn)

Delay(0xFFFF);

}

下面以CW32L083為例通過(guò)配置GPIO引腳來(lái)驅(qū)動(dòng)SPI2外設(shè),查閱CW32L083的用戶手冊(cè)可以得知, SPI2可以通過(guò)PA00,PA01,PA02,PA03復(fù)用實(shí)現(xiàn),這個(gè)就是上文提到的GPIO口的復(fù)用功能。


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

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

PA02_AFx_SPI2SCK() //將PA02復(fù)用成SPI2的時(shí)鐘線

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

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支持外部中斷,具體的配置如下,如果有不清楚的小伙伴可以查看下節(jié)CW32中斷控制器,會(huì)有詳細(xì)講解。


GPIO_InitTypeDef GPIO_InitStruct = {0};

__RCC_GPIOA_CLK_ENABLE();//開(kāi)啟GPIOA的時(shí)鐘

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

GPIO_InitStruct.Mode = GPIO_MODE_INPUT;

GPIO_InitStruct.Pins =GPIO_PIN_1;

GPIO_Init(CW_GPIOA, GPIO_InitStruct);

//清除PA01中斷標(biāo)志并使能NVIC

GPIOA_INTFLAG_CLR(bv1);

NVIC_EnableIRQ(GPIOA_IRQn);

上面的例程即可實(shí)現(xiàn)外部輸入中斷,PA01在接收到上升沿或者下降沿的信號(hào)的時(shí)候會(huì)進(jìn)入到中斷函數(shù)中去執(zhí)行相關(guān)的程序,具體的例程可以參考官方CW32L083的gpio_int_filter例子。

下面介紹的是CW32L083的GPIO所相關(guān)的函數(shù)及其功能。


1.void GPIO_SWD2GPIO(void);

將PA13/PA14 SWD設(shè)置成GPIO

2.void GPIO_GPIO2SWD(void);

將PA13/PA14設(shè)置成SWD

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

鎖定指定引腳配置項(xiàng),可同時(shí)設(shè)置多個(gè)引腳

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

GPIO去初始化,可同時(shí)設(shè)置多個(gè)引腳或單個(gè)引腳

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

GPIO 初始化,可同時(shí)設(shè)置多個(gè)引腳或單個(gè)引腳

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

設(shè)置指定引腳電平,可同時(shí)設(shè)置多個(gè)引腳

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

設(shè)置指定引腳端口的輸出值

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

翻轉(zhuǎn)指定引腳電平,可同時(shí)設(shè)置多個(gè)引腳

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

獲取一個(gè)引腳的電平

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

來(lái)源:武漢芯源半導(dǎo)體

審核編輯:湯梓紅

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

    關(guān)注

    31

    文章

    5368

    瀏覽量

    121244
  • 端口
    +關(guān)注

    關(guān)注

    4

    文章

    990

    瀏覽量

    32233
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1217

    瀏覽量

    52422
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    CW32移植Free-RTOS】CW32開(kāi)發(fā)者扶持計(jì)劃

    CW32配置Free-RTOS全過(guò)程,CW32開(kāi)發(fā)者扶持計(jì)劃
    的頭像 發(fā)表于 04-18 09:38 ?6250次閱讀
    【<b class='flag-5'>CW32</b>移植Free-RTOS】<b class='flag-5'>CW32</b>開(kāi)發(fā)者扶持計(jì)劃

    通用輸入輸出端口GPIO配置說(shuō)明

    【STM32F0系列學(xué)習(xí)】之—通用輸入輸出端口GPIO1、GPIO端口配置說(shuō)明1、GPIO端口配置說(shuō)明
    發(fā)表于 01-24 07:42

    CW32 通用輸入輸出端口

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

    視頻打印機(jī)的輸入輸出

    視頻打印機(jī)的輸入輸出            輸入輸出指的是產(chǎn)品輸入輸出視頻信號(hào)的端口,比較常見(jiàn)
    發(fā)表于 12-31 10:38 ?1509次閱讀

    更高的帶寬! 說(shuō)說(shuō)筆記本的輸入輸出端口

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

    STM32F2技術(shù)培訓(xùn)_通用輸入輸出端口_GPIO

    STM32F2技術(shù)培訓(xùn)_通用輸入輸出端口_GPIO
    發(fā)表于 12-03 17:34 ?0次下載

    F2產(chǎn)品技術(shù)培訓(xùn)_8.通用輸入輸出端口(GPIO)

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

    MSP430教程Chapt6-通用輸入輸出

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

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

    對(duì)于常規(guī)MCU,通用輸入輸出(GPIO)是其最基本、最常用的功能,用于實(shí)現(xiàn)最基本的數(shù)字量輸入輸出。 信號(hào)一般為:以3.3VDC為高電平的LTTL電平以5.0VDC為高電平的TTL電
    發(fā)表于 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、
    發(fā)表于 11-26 15:21 ?9次下載
    04、STM8<b class='flag-5'>通用</b><b class='flag-5'>輸入輸出</b>口(GPIO)

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

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

    GPIO通用輸入輸出

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

    CW32 PWM輸出功能介紹

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

    CW32定時(shí)器操作講解——輸入捕獲

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

    基于CW32的物聯(lián)網(wǎng)應(yīng)用

    CW32】基于CW32的物聯(lián)網(wǎng)應(yīng)用
    的頭像 發(fā)表于 11-02 15:55 ?871次閱讀
    基于<b class='flag-5'>CW32</b>的物聯(lián)網(wǎng)應(yīng)用