zeshoufx 发表于 2019-10-18 11:10

关于GD32F103寄存器(地址)编程,及模板

一、寄存器编程
寄存器编程只需要一个启动文件即可,说是寄存器编程,严格说来是采用地址编程
二、配置函数
#include "led.h"


void led_init(void)
{
        /* GPIOE时钟使能*/
        (*((volatile unsigned int*)(0x40021000+0x18)))|=1<<6;
        /* PE10推挽输出,50Mhz*/
        (*((volatile unsigned int*)(0x40011800+0x04)))=0x00000300;
        /* PE10输出低电平,LED熄灭*/
        (*((volatile unsigned int*)(0x40011800+0x0c)))&=~(unsigned int)(1<<10);
}


void led_on(void)
{
        /* PE10输出高电平,LED点亮*/
        (*((volatile unsigned int*)(0x40011800+0x0c)))|=(unsigned int)(1<<10);
}

void led_off(void)
{
        /* PE10输出低电平,LED熄灭*/
        (*((volatile unsigned int*)(0x40011800+0x0c)))&=~(unsigned int)(1<<10);
}

/* 延时函数*/
void delay(unsigned int n)
{
        while(n--);
}


三、主函数


/*昆明电器科学研究所 张恩寿 2019年10月17日*/

#include "led.h"


int main(void)
{
        led_init();
        while(1)
        {
                led_on();
                delay(600000);
                led_off();
                delay(600000);
        }
}



四、结论
发现采用库函数编程存在一些冗余,采用地址编程简单明了

gwsan 发表于 2019-11-12 13:28

非常感谢楼主分享

kxsi 发表于 2019-11-12 14:00

非常感谢楼主分享

wowu 发表于 2019-11-12 14:09

非常感谢楼主分享

nawu 发表于 2019-11-12 14:52

非常感谢楼主分享

qcliu 发表于 2019-11-12 15:17

非常感谢楼主分享

34af9uc 发表于 2023-10-23 19:32

int main(void)
{
while(1);
       
}
竟然这么写

zeshoufx 发表于 2023-10-24 09:38

34af9uc 发表于 2023-10-23 19:32
int main(void)
{
while(1);


这个是单片机开发的一般框架
页: [1]
查看完整版本: 关于GD32F103寄存器(地址)编程,及模板