zl程序教程

您现在的位置是:首页 >  大数据

当前栏目

第一周-GD32F4XX的配置和函数归纳(1)

配置 函数 归纳
2023-09-11 14:20:47 时间

GD32F4XX的配置和函数归纳(1)

1.找到和整理官方例程和该开发板的头文件
2.结合用户手册,总结闪存控制器(FMC)和输出输入控制端(GPIO)的寄存器配置以及函数表达含义
3.结合例程1,巩固对函数的理解
4.下周学习电源管理单元PMU,复位和时钟单元RCU,时钟校准控制器CT和中断/事件控制器EXTI的配置和函数


1.闪存控制器(FMC)

1.找到每一个寄存器的地址,并给予每一个寄存器功能的位/位域(字节位)
在这里插入图片描述
2.结构体表示FMC的状态
在这里插入图片描述
3.设定选项字节,给上述状态分配字节

4.函数:
4.1设置等待状态计数器值函数void fmc_wscnt_set(uint32_t wscnt);
4.2打开主FMC的运行void fmc_unlock(void);
4.3关闭主FMC的运行void fmc_lock(void);
4.4FMC各种擦除方式(部分,全部,BANK0,BANK1)
在这里插入图片描述
4.5把数据放入某个地址(对字(Word)、半字(Half-Word)、字节(Byte))
在这里插入图片描述
4.6选项字节的配置函数
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
FMC的中断和标志管理(打开关闭中断(程序中断和错误中断),检验状态寄存器,返回FMC的状态(前者直接返回状态情况,后者在FMC不忙碌时返回))

2.输出输入控制端(GPIO)

1.给 GPIOx(x=A,B,C,D,E,F,G,H,I)分配地址,每个GPIx有16个pin脚
2.共每个GPIO里有12个寄存器,按照手册书设定字节
在这里插入图片描述

3.定义各种模式的函数和变量:
在这里插入图片描述

4.函数
4.1重置某个GPIX(利用定时模块的函数打开再关闭),设置GPIX的模式(1.输出、输入、AF、模拟 2.空浮、上拉、下拉)、最后一个函数是设置输出信号频率
在这里插入图片描述
4.2控制某个GPIx的具体pin脚(共16个)
函数分别为:打开GPIx_pin,关闭GPIx_pin,写入GPIx_pin的值(利用端口位操作寄存器BOP),输出GPIx的值(只输出GPIx和此端口的值,具体的pin输出后自己做操作,利用端口输出操作寄存器OCTL)
在这里插入图片描述
4.3查看GPIOx_pin的状态
函数分别为:
1.查看某个具体pin脚的输入状态(set或reset)
2.查看某个GPIOx的输入状态(所有pin的值)
3.后两个将输入改成输出
在这里插入图片描述
4.4AF模式下,将pin脚的值转换成数字
在这里插入图片描述

4.5锁定GPIOx的pin脚的值
在这里插入图片描述
4.6翻转GPIOx的pin脚和整体的状态(0 1互换)
在这里插入图片描述

3.实例1.GPIO流水灯

#include "gd32f4xx.h"
#include "gd32f450z_eval.h"
#include "systick.h"

/*!
    \brief      main function
    \param[in]  none
    \param[out] none
    \retval     none
*/
int main(void)
{
    /* configure systick */
    systick_config();

    /* enable the LEDs GPIO clock */
    rcu_periph_clock_enable(RCU_GPIOD);
    rcu_periph_clock_enable(RCU_GPIOG);

    /* configure LED1 and LED2 GPIO port */ 
    gpio_mode_set(GPIOD, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_4 | GPIO_PIN_5);
    gpio_output_options_set(GPIOE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_4 | GPIO_PIN_5);
    /* reset LED1 and LED2 GPIO pin */
    gpio_bit_reset(GPIOE, GPIO_PIN_4 | GPIO_PIN_5);

    /* configure LED3 GPIO port */ 
    gpio_mode_set(GPIOG, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_3);
    gpio_output_options_set(GPIOG, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_3);
    /* reset LED3 GPIO pin */
    gpio_bit_reset(GPIOG, GPIO_PIN_3);

    while(1){
        /* turn on LED1, turn off LED2 and LED3 */
        gpio_bit_set(GPIOD, GPIO_PIN_4);
        gpio_bit_reset(GPIOD, GPIO_PIN_5);
        gpio_bit_reset(GPIOG, GPIO_PIN_3);
        delay_1ms(400);

        /* turn on LED2, turn off LED1 and LED3 */
        gpio_bit_set(GPIOD, GPIO_PIN_5);
        gpio_bit_reset(GPIOD, GPIO_PIN_4);
        gpio_bit_reset(GPIOG, GPIO_PIN_3);
        delay_1ms(400);

        /* turn on LED3, turn off LED1 and LED2 */
        gpio_bit_set(GPIOG, GPIO_PIN_3);
        gpio_bit_reset(GPIOD, GPIO_PIN_4);
        gpio_bit_reset(GPIOD, GPIO_PIN_5);
        delay_1ms(400);
    }
}

步骤:
1.先给LED1 2 3对应的GPIO所在的pin脚
在这里插入图片描述
2.gpio_mode_set()函数将PD4-PD5-PG3设为输出,并且初始化为空浮状态
gpio_output_options_set()函数将PD4-PD5-PG3调为推挽模式,频率为50MHZ

3.最后利用gpio_bit_set()和gpio_bit_reset()函数实现轮流亮灯