欢迎光临散文网 会员登陆 & 注册

AT32学习笔记-GPIO.md

2022-11-27 09:14 作者:繁花cloud  | 我要投稿

GPIO

初始化

```c

// 创建GPIO INIT参数结构体

gpio_init_type gpio_init_struct;


// 开启GPIO外设时钟

crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);


/* 设置结构体默认的值 */

gpio_default_para_init(&gpio_init_struct);


/* 配置IO口 */

// 驱动强度,选强

gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;

// GPIO输出模式 GPIO_OUTPUT_PUSH_PULL 推挽输出 GPIO_OUTPUT_OPEN_DRAIN 开漏输出

gpio_init_struct.gpio_out_type  = GPIO_OUTPUT_PUSH_PULL;

// GPIO模式 GPIO_MODE_INPUT 输入 GPIO_MODE_OUTPUT 输出 GPIO_MODE_MUX IOMUX,至片上外设

// GPIO_MODE_ANALOG 模拟输入/输出

gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;

// GPIO引脚 GPIO_PINS_0-15 GPIO_PINS_ALL,支持|操作,例如 GPIO_PINS_0 | GPIO_PINS_1

gpio_init_struct.gpio_pins = GPIO_PINS_1;

// 内部上拉,一般用于输入的时候

gpio_init_struct.gpio_pull = GPIO_PULL_NONE;

// 初始化

gpio_init(GPIOA, &gpio_init_struct);

```

设置高低电平

置1

```c

/**

  * @brief  set the selected data port bits.

  * @param  gpio_x: to select the gpio peripheral.

  *         this parameter can be one of the following values:

  *         GPIOA, GPIOB, GPIOC, GPIOD, GPIOF.

  * @param  pins: gpio pin number

  *         parameter can be any combination of gpio_pin_x, gpio_pin_x as following values:

  *         - GPIO_PINS_0

  *         - GPIO_PINS_1

  *         - GPIO_PINS_2

  *         - GPIO_PINS_3

  *         - GPIO_PINS_4

  *         - GPIO_PINS_5

  *         - GPIO_PINS_6

  *         - GPIO_PINS_7

  *         - GPIO_PINS_8

  *         - GPIO_PINS_9

  *         - GPIO_PINS_10

  *         - GPIO_PINS_11

  *         - GPIO_PINS_12

  *         - GPIO_PINS_13

  *         - GPIO_PINS_14

  *         - GPIO_PINS_15

  *         - GPIO_PINS_ALL

  * @retval none

  */

void gpio_bits_set(gpio_type *gpio_x, uint16_t pins);

```

置0

```c

/**

  * @brief  clear the selected data port bits.

  * @param  gpio_x: to select the gpio peripheral.

  *         this parameter can be one of the following values:

  *         GPIOA, GPIOB, GPIOC, GPIOD, GPIOF.

  * @param  pins: gpio pin number

  *         parameter can be any combination of gpio_pin_x, gpio_pin_x as following values:

  *         - GPIO_PINS_0

  *         - GPIO_PINS_1

  *         - GPIO_PINS_2

  *         - GPIO_PINS_3

  *         - GPIO_PINS_4

  *         - GPIO_PINS_5

  *         - GPIO_PINS_6

  *         - GPIO_PINS_7

  *         - GPIO_PINS_8

  *         - GPIO_PINS_9

  *         - GPIO_PINS_10

  *         - GPIO_PINS_11

  *         - GPIO_PINS_12

  *         - GPIO_PINS_13

  *         - GPIO_PINS_14

  *         - GPIO_PINS_15

  *         - GPIO_PINS_ALL

  * @retval none

  */

void gpio_bits_reset(gpio_type *gpio_x, uint16_t pins);

```

设置,传入0 1

```c

/**

  * @brief  set or clear the selected data port bit.

  * @param  gpio_x: to select the gpio peripheral.

  *         this parameter can be one of the following values:

  *         GPIOA, GPIOB, GPIOC, GPIOD, GPIOF.

  * @param  pins: gpio pin number

  *         parameter can be any combination of gpio_pin_x, gpio_pin_x as following values:

  *         - GPIO_PINS_0

  *         - GPIO_PINS_1

  *         - GPIO_PINS_2

  *         - GPIO_PINS_3

  *         - GPIO_PINS_4

  *         - GPIO_PINS_5

  *         - GPIO_PINS_6

  *         - GPIO_PINS_7

  *         - GPIO_PINS_8

  *         - GPIO_PINS_9

  *         - GPIO_PINS_10

  *         - GPIO_PINS_11

  *         - GPIO_PINS_12

  *         - GPIO_PINS_13

  *         - GPIO_PINS_14

  *         - GPIO_PINS_15

  *         - GPIO_PINS_ALL

  * @param  bit_state: specifies the value to be written to the selected bit (TRUE or FALSE).

  * @retval none

  */

void gpio_bits_write(gpio_type *gpio_x, uint16_t pins, confirm_state bit_state);

```

位段操作

同时对某一个GPIO做操作,port_value按照位传入

```c

/**

  * @brief  write data to the specified gpio data port.

  * @param  gpio_x: to select the gpio peripheral.

  *         this parameter can be one of the following values:

  *         GPIOA, GPIOB, GPIOC, GPIOD, GPIOF.

  * @param  port_value: specifies the value to be written to the port output data register.

  * @retval none

  */

void gpio_port_write(gpio_type *gpio_x, uint16_t port_value);

```

## 重置GPIO寄存器

初始化的时候,如果有需求可以重置  

```c

/**

  * @brief  reset the gpio register

  * @param  gpio_x: to select the gpio peripheral.

  *         this parameter can be one of the following values:

  *         GPIOA, GPIOB, GPIOC, GPIOD, GPIOF.

  * @retval none

  */

void gpio_reset(gpio_type *gpio_x);

```


点灯

```c

gpio_init_type gpio_init_struct;


/* enable the led clock */

crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);


/* set default parameter */

gpio_default_para_init(&gpio_init_struct);


/* configure the led gpio */

gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;

gpio_init_struct.gpio_out_type  = GPIO_OUTPUT_PUSH_PULL;

gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;

gpio_init_struct.gpio_pins = GPIO_PINS_1;

gpio_init_struct.gpio_pull = GPIO_PULL_NONE;

gpio_init(GPIOA, &gpio_init_struct);


i = !i;

if(i){

    gpio_bits_set(GPIOA, GPIO_PINS_1);

}else{

    gpio_bits_reset(GPIOA, GPIO_PINS_1);

}

```


AT32学习笔记-GPIO.md的评论 (共 条)

分享到微博请遵守国家法律