打印
[其它]

合泰32笔记2-GPIO使用(2022/2/20)

[复制链接]
141|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wangtaohui|  楼主 | 2023-2-25 12:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
GPIO, IO, gp, pi
HT-GPIO使用
1.依赖库的位置


如上图:合泰的库文件的头文件在文件夹外部,且是5个上级目录的子文件内,

所以,移植时注意将合泰的源文件夹(以外设命名的文件夹)放在三级含有库的三级子文件夹内。

使用特权

评论回复

相关帖子

沙发
wangtaohui|  楼主 | 2023-2-25 12:20 | 只看该作者
下图为例:



否则则需 在项目文件夹复制入两个文件夹 library 和utilities, 并修改头文件路径 。

使用特权

评论回复
板凳
wangtaohui|  楼主 | 2023-2-25 12:32 | 只看该作者
自己写的外设.c.h文件需包含的基本头文件为如下三个:
#include "ht32.h"
#include "ht32_board.h"
#include "ht32_board_config.h"

使用特权

评论回复
地板
wangtaohui|  楼主 | 2023-2-25 12:36 | 只看该作者
GPIO使用
1.时钟配置:
合泰将所有板级的时钟配置寄存器(3个32位的寄存器定义为一个联合体union),且在联合体 CKCU_PeripClockConfig_TypeDef 内定义了一个32位的结构体,使我们可以在3个与时钟配置相关的32位寄存器中“可位寻址”。

使用特权

评论回复
5
wangtaohui|  楼主 | 2023-2-25 12:43 | 只看该作者
使用时,如下:
[code]void CKCU_Configuration(void)
{
  CKCU_PeripClockConfig_TypeDef CKCUClock = {{0}};
//定义一个 *CKCU_PeripClockConfig_TypeDef* 此类型的联合体,建议内部的结构体全部赋值2为0(关闭所有时钟)
  HTCFG_OUTPUT_LED0_CLK(CKCUClock) = 1;
  HTCFG_OUTPUT_LED1_CLK(CKCUClock) = 1;
  HTCFG_OUTPUT_LED2_CLK(CKCUClock) = 1;
  HTCFG_INPUT_WAKE_CLK(CKCUClock)  = 1;
  HTCFG_INPUT_KEY1_CLK(CKCUClock)  = 1;
  HTCFG_INPUT_KEY2_CLK(CKCUClock)  = 1;
//

使用特权

评论回复
6
wangtaohui|  楼主 | 2023-2-25 12:46 | 只看该作者
GPIO输出/输入配置
几乎每一个IO都可以被复用为多达15种功能(GPIO也是功能之一),所以建议在使用前均使用复用功能配置函数配置好IO对应的内部功能。

使用特权

评论回复
7
wangtaohui|  楼主 | 2023-2-25 12:49 | 只看该作者
/*********************************************************************************************************//**
* [url=home.php?mod=space&uid=247401]@brief[/url] Configure alternated mode of GPIO with specified pins.
* @param GPIO_Px: ⭐GPIO_PA ~ GPIO_PD.填写IO端口port,宏定义好的
* @param AFIO_PIN_n: This parameter can be any combination of AFIO_PIN_x.⭐填写对应对应引脚,即我们要用的引脚
* @param AFIO_MODE_n: This parameter can be one of the following values:对应的内部功能有如下15个选择,
*        [url=home.php?mod=space&uid=2817080]@ARG[/url] AFIO_MODE_DEFAULT : The default I/O function
*        @arg AFIO_MODE_1       : Alternated mode 1
*        @arg AFIO_MODE_2       : Alternated mode 2
*        @arg AFIO_MODE_3       : Alternated mode 3
*        @arg AFIO_MODE_4       : Alternated mode 4
*        @arg AFIO_MODE_5       : Alternated mode 5
*        @arg AFIO_MODE_6       : Alternated mode 6
*        @arg AFIO_MODE_7       : Alternated mode 7
*        @arg AFIO_MODE_8       : Alternated mode 8
*        @arg AFIO_MODE_9       : Alternated mode 9
*        @arg AFIO_MODE_10      : Alternated mode 10
*        @arg AFIO_MODE_11      : Alternated mode 11
*        @arg AFIO_MODE_12      : Alternated mode 12
*        @arg AFIO_MODE_13      : Alternated mode 13
*        @arg AFIO_MODE_14      : Alternated mode 14
*        @arg AFIO_MODE_15      : Alternated mode 15
* @retval None

⭐但通常不会直接填写下面的模式几而是填写<ht32f5xxxx_gpio.h>头文件中的宏定义:如下:
************************************************************************************************************/
void AFIO_GPxConfig(u32 GPIO_Px, u32 AFIO_PIN_n, AFIO_MODE_Enum AFIO_MODE_n)

使用特权

评论回复
8
wangtaohui|  楼主 | 2023-2-25 12:57 | 只看该作者
/* Definitions of AFIO_FUN                                         常填写的是以下宏定义为函数功能,易读                                      */
#define AFIO_FUN_DEFAULT    AFIO_MODE_DEFAULT  /*!< Default AFIO mode                                       */
#define AFIO_FUN_GPIO       AFIO_MODE_1        /*!< AFIO mode GPIO                                          */
#define AFIO_FUN_DAC        AFIO_MODE_2        /*!< AFIO mode DAC                                           */
#define AFIO_FUN_ADC0       AFIO_MODE_2        /*!< AFIO mode ADC0                                          */
#define AFIO_FUN_ADC1       AFIO_MODE_3        /*!< AFIO mode ADC1                                          */
#define AFIO_FUN_CMP        AFIO_MODE_3        /*!< AFIO mode CMP                                           */
#define AFIO_FUN_MCTM_GPTM  AFIO_MODE_4        /*!< AFIO mode MCTM/GPTM                                     */
#if (LIBCFG_AFIO_PWM_MODE4)
#define AFIO_FUN_PWM        AFIO_MODE_4        /*!< AFIO mode PWM                                           */
#else
#define AFIO_FUN_PWM        AFIO_MODE_13       /*!< AFIO mode PWM                                           */
#endif
#define AFIO_FUN_SPI        AFIO_MODE_5        /*!< AFIO mode SPI                                           */
#define AFIO_FUN_USART_UART AFIO_MODE_6        /*!< AFIO mode USART/UART                                    */
#define AFIO_FUN_I2C        AFIO_MODE_7        /*!< AFIO mode I2C                                           */
#define AFIO_FUN_SCI        AFIO_MODE_8        /*!< AFIO mode SCI                                           */
#define AFIO_FUN_CMP_OPA    AFIO_MODE_8        /*!< AFIO mode CMP/OPA                                       */
#define AFIO_FUN_EBI        AFIO_MODE_9        /*!< AFIO mode EBI                                           */
#define AFIO_FUN_I2S        AFIO_MODE_10       /*!< AFIO mode I2S                                           */
#if (LIBCFG_AFIO_SCTM_MODE9)
#define AFIO_FUN_SCTM       AFIO_MODE_9        /*!< AFIO mode SCTM                                          */
#else
#define AFIO_FUN_SCTM       AFIO_MODE_13       /*!< AFIO mode SCTM                                          */
#endif
#define AFIO_FUN_TEKY       AFIO_MODE_12       /*!< AFIO mode TKEY                                          */
#define AFIO_FUN_LCD        AFIO_MODE_14       /*!< AFIO mode LCD                                           */
#define AFIO_FUN_SLED       AFIO_MODE_14       /*!< AFIO mode SLED                                          */
#define AFIO_FUN_LEDC       AFIO_MODE_14       /*!< AFIO mode LEDC                                          */
#define AFIO_FUN_SYSTEM     AFIO_MODE_15       /*!< AFIO mode System                                        */

/* Definitions of AFIO_FUN alias                                                                            */
#define AFIO_FUN_MCTM0      AFIO_FUN_MCTM_GPTM

#define AFIO_FUN_GPTM0      AFIO_FUN_MCTM_GPTM
#define AFIO_FUN_GPTM1      AFIO_FUN_MCTM_GPTM
#define AFIO_FUN_GPTM2      AFIO_FUN_MCTM_GPTM
#define AFIO_FUN_GPTM3      AFIO_FUN_MCTM_GPTM

#define AFIO_FUN_PWM0       AFIO_FUN_PWM
#define AFIO_FUN_PWM1       AFIO_FUN_PWM
#define AFIO_FUN_PWM2       AFIO_FUN_PWM
#define AFIO_FUN_PWM3       AFIO_FUN_PWM

#define AFIO_FUN_SCTM0      AFIO_FUN_SCTM
#define AFIO_FUN_SCTM1      AFIO_FUN_SCTM
#define AFIO_FUN_SCTM2      AFIO_FUN_SCTM
#define AFIO_FUN_SCTM3      AFIO_FUN_SCTM

#define AFIO_FUN_ADC        AFIO_FUN_ADC0

使用特权

评论回复
9
wangtaohui|  楼主 | 2023-2-25 13:02 | 只看该作者
输出/入选择配置:
/*********************************************************************************************************//**
* @brief Configure the direction of specified GPIO pins.
* @param HT_GPIOx: where HT_GPIOx is the selected GPIO from the GPIO peripherals.⭐使用的引脚的port
* @param GPIO_PIN_nBITMAP: The port pins.⭐使用的引脚的pin
*   This parameter can be any combination of GPIO_PIN_x.
* @param GPIO_DIR_INorOUT:
*   This parameter can be one of below:
*     ⭐@arg GPIO_DIR_IN  : The pins are input mode
*     ⭐@arg GPIO_DIR_OUT : The pins are output mode
两个模式的参数选择,对应宏就好
* @retval None
************************************************************************************************************/
void GPIO_DirectionConfig(HT_GPIO_TypeDef* HT_GPIOx, u16 GPIO_PIN_nBITMAP, GPIO_DIR_Enum GPIO_DIR_INorOUT)

使用特权

评论回复
10
wangtaohui|  楼主 | 2023-2-25 13:02 | 只看该作者
内部的上下拉电阻配置:
/*********************************************************************************************************//**
* @brief Configure the pull resistor of specified GPIO pins.
* @param HT_GPIOx: where HT_GPIOx is the selected GPIO from the GPIO peripherals.端口
* @param GPIO_PIN_nBITMAP: The port pins.引脚
*   This parameter can be any combination of GPIO_PIN_x.
* @param GPIO_PR_x: Selection of Pull resistor.
*   This parameter can be one of below:
*     @arg GPIO_PR_UP      : The pins with internal pull-up resistor⭐上拉电阻宏
*     @arg GPIO_PR_DOWN    : The pins with internal pull-down resistor⭐下拉电阻宏
*     @arg GPIO_PR_DISABLE : The pins without pull resistor
* @retval None⭐开漏状态宏
************************************************************************************************************/
void GPIO_PullResistorConfig(HT_GPIO_TypeDef* HT_GPIOx, u16 GPIO_PIN_nBITMAP, GPIO_PR_Enum GPIO_PR_x)

使用特权

评论回复
11
wangtaohui|  楼主 | 2023-2-25 13:02 | 只看该作者
输入使能设置

设置为输入时,需要多加这一步使能
/*********************************************************************************************************//**
* @brief Enable or Disable the input control of specified GPIO pins.端口
* @param HT_GPIOx: where HT_GPIOx is the selected GPIO from the GPIO peripherals.
* @param GPIO_PIN_nBITMAP: The port pins.引脚
*   This parameter can be any combination of GPIO_PIN_x.
* @param Cmd: This parameter can be ENABLE or DISABLE.
* @retval None使能与否
************************************************************************************************************/
void GPIO_InputConfig(HT_GPIO_TypeDef* HT_GPIOx, u16 GPIO_PIN_nBITMAP, ControlStatus Cmd)

使用特权

评论回复
12
wangtaohui|  楼主 | 2023-2-25 13:05 | 只看该作者
读取输入和设置输出电平
使用以下函数,参数都较为简单
//读取函数:
FlagStatus GPIO_ReadInBit(HT_GPIO_TypeDef* HT_GPIOx, u16 GPIO_PIN_n);
//读取设置为输入io的电平
FlagStatus GPIO_ReadOutBit(HT_GPIO_TypeDef* HT_GPIOx, u16 GPIO_PIN_n);
//读取设置为输出io的电平
u16 GPIO_ReadInData(HT_GPIO_TypeDef* HT_GPIOx);
//读取设置为输入io的整个io组寄存器的电平
u16 GPIO_ReadOutData(HT_GPIO_TypeDef* HT_GPIOx);
//读取设置为输出io的整个组寄存器的电平

使用特权

评论回复
13
wangtaohui|  楼主 | 2023-2-25 13:05 | 只看该作者
//设置函数:
void GPIO_SetOutBits(HT_GPIO_TypeDef* HT_GPIOx, u16 GPIO_PIN_nBITMAP);
//置一函数
void GPIO_ClearOutBits(HT_GPIO_TypeDef* HT_GPIOx, u16 GPIO_PIN_nBITMAP);
//清零函数
void GPIO_WriteOutBits(HT_GPIO_TypeDef* HT_GPIOx, u16 GPIO_PIN_nBITMAP, FlagStatus Status);
//设置某一位为0/1,可用定义的枚举类型代替RESET/SET
/*
两个通用的枚举类型
typedef enum {RESET = 0, SET = !RESET} FlagStatus;
typedef enum {ERROR = 0, SUCCESS = !ERROR} ErrStatus;
*/
void GPIO_WriteOutData(HT_GPIO_TypeDef* HT_GPIOx, u16 Data);
//设置整组IO的输出寄存器,填入数据为u16

使用特权

评论回复
14
wangtaohui|  楼主 | 2023-2-25 13:06 | 只看该作者
引脚复用功能的定义与查找
基本上合泰的引脚都建议在使用前明确复用为什么功能。避免与SW等的下载接口冲突,而造成IO没有用作想要的功能。

而合泰单片机引脚的复用功能表可以在数据手册(simHT32F52342_52_Datasheetv150.pdf)中查找,截图如下:

使用特权

评论回复
15
wangtaohui|  楼主 | 2023-2-25 13:06 | 只看该作者

使用特权

评论回复
16
wangtaohui|  楼主 | 2023-2-25 13:06 | 只看该作者

使用特权

评论回复
17
wangtaohui|  楼主 | 2023-2-25 13:06 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

32

主题

250

帖子

0

粉丝