打印

【原创】《wdxLib_for_GD32F103》驱动开发(V0.1提供高质量源代码)

[复制链接]
45597|916
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
周立功GD32|  楼主 | 2013-7-10 15:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 周立功GD32 于 2013-11-17 15:27 编辑

现在大家开发STM32F103或GD32F103基本上都会使用《STM固件库》,但这是面向底层硬件的驱动库,对于应用工程师而言使用起来非常不方便。我本来想重新写一个,但完全重新写又太费时费力。故我在原有STM固件库的基础上重新封装了一个面向应用的驱动库:《wdxLib for STM/GD32F103》。

wdxLib将以源代码的形式贡献出来,并将尽量保持所生成的代码既能在STM32F103上运行又能在GD32F103上运行。
这个库是从应用角度出发重新设计的函数接口,仅要求应用工程师对底层有个粗浅的了解即能熟练运用。
如果发现有什么bug,请及时报告,多谢支持!
对于国产的GD32F103系列ARM,我也是初学没多久,需要共同探讨共同进步,呵呵!

下载附件吧
(01)STM固件库及安装.rar (543 KB)
(02)新建工程模板.rar (34.31 KB)
(03)wdxLib基础定义.rar (1.53 KB)
(04)系统时钟与GPIO.rar (332.61 KB)
(05)SysTick定时器.rar (122.97 KB)
(06)GPIO中断.rar (104.28 KB)
(07)Sleep模式与唤醒.rar (170.09 KB)
(08)SoftTMR软件定时器.rar (112.16 KB)
(09)USART通用同步异步收发器(初步).rar (765.45 KB)
(10)BKP寄存器与RTC实时时钟.rar (802.36 KB)
(11)Stop和Standby模式.rar (490.81 KB)

此为V0.1版本,不再更新,请参考最新的V0.2版:
https://bbs.21ic.com/icview-643984-1-1.html
评分
参与人数 3威望 +22 收起 理由
张亚杰 + 1 我能给的最多的分啦
rainbow99 + 1 ST的库做的很不错,为啥说使用起来不方便?.
锐鑫同创 + 20 先给穿个裤子,期待楼主后面的连载。.
沙发
cgd| | 2013-7-10 15:33 | 只看该作者
沙发!

使用特权

评论回复
板凳
锐鑫同创| | 2013-7-10 15:40 | 只看该作者
支持,谢谢您的分享,建议把这个连载放到一个帖子里,不然太乱了,谢谢。

使用特权

评论回复
地板
周立功GD32|  楼主 | 2013-7-10 15:55 | 只看该作者
刚才断线,现在把标题修改了,以后会逐步在贴子里添加,共大家下载研究

使用特权

评论回复
5
周立功GD32|  楼主 | 2013-7-10 15:58 | 只看该作者
本帖最后由 周立功GD32 于 2013-7-11 10:32 编辑

支持

使用特权

评论回复
6
锐鑫同创| | 2013-7-10 16:00 | 只看该作者
周立功GD32 发表于 2013-7-10 15:55
刚才断线,现在把标题修改了,以后会逐步在贴子里添加,共大家下载研究

谢谢您的支持,其实在1楼直接编辑添加内容最好,方便查看。

使用特权

评论回复
7
tonydong| | 2013-7-10 16:14 | 只看该作者
:handshake周立功的人就是NB

使用特权

评论回复
8
Z赤心木QW| | 2013-7-10 20:32 | 只看该作者
难道你就是我同学说的那个人吗?哈哈!!!久仰久仰!!

使用特权

评论回复
9
miaoguoqiang| | 2013-7-11 08:58 | 只看该作者
抱歉,只有特定用户可以下载本站附件

使用特权

评论回复
10
周立功GD32|  楼主 | 2013-7-11 09:04 | 只看该作者
已降低下载级别,再试试

使用特权

评论回复
11
周立功GD32|  楼主 | 2013-7-11 10:38 | 只看该作者
今天新增:SysTick定时器
驱动程序的接口非常友好,并且纠正了原有驱动库的一个bug:时钟源只能配置为HCLK而不能取HCLK/8

//  初始化
void sysTickInit(void);

//  获取工作时钟
uint32_t sysTickClockGet(void);

//  注册用户的中断处理函数
void sysTickIntRegist(tIsrPtr UserFun);

//  注销中断
void sysTickIntUnregist(void);

//  装载并运行(溢出时会自动重装)
void sysTickLoadRun(uint32_t LoadVal);

//  停止运行
void sysTickStop(void);

//  获取当前计数值
uint32_t sysTickCounterGet(void);

使用特权

评论回复
12
周立功GD32|  楼主 | 2013-7-11 10:53 | 只看该作者
本帖最后由 周立功GD32 于 2013-7-11 10:57 编辑

系统时钟配置示例:

    //  设置系统时钟(48MHz主频)
    if (sysClockSet(OSC_HSE, FREQ_8M, 6) == FALSE)      //  采用外部8MHz晶振,6倍频
    {
        sysClockSet(OSC_HSI, FREQ_8M, 6);               //  若外部晶振失效,则改用内部振荡器
    }

在sysClockSet()这个函数里,会调用ST库的SystemCoreClockUpdate()函数,以刷新全局时钟变量SystemCoreClock。

而sysClockGet()函数返回的正是SystemCoreClock值。

建议用sysClockGet()获取CPU时钟频率,而不要直接访问SystemCoreClock变量。

使用特权

评论回复
13
周立功GD32|  楼主 | 2013-7-11 11:02 | 只看该作者
wdxGPIO模块用法示例:

//  定义LED端口
#define  LED_PORT       GPIOE
#define  LED_PIN        PIN7

void LedTest(void)
{
    //  初始化配置
    gpioPeriphInit(LED_PORT);                               //  初始化LED所在的GPIO端口
    gpioPinConfig(LED_PORT, LED_PIN, GPIO_MODE_OUT);        //  把驱动LED的管脚配置为推挽输出模式

    for (;;) {
        gpioPinSet(LED_PORT, LED_PIN);                      //  点亮LED
        msDelay(100);
        gpioPinClear(LED_PORT, LED_PIN);                    //  熄灭LED
        msDelay(900);
    }
}

使用特权

评论回复
14
tergy2012| | 2013-7-11 11:26 | 只看该作者
不错,支持啊

使用特权

评论回复
15
周立功GD32|  楼主 | 2013-7-11 11:33 | 只看该作者
wdxSysTick模块(系统节拍定时器)用法示例:

//  定义全局变量
uint32_t msDelayBase = 6000;
volatile tBool  msDelayFlag = FALSE;            //  被ISR引用的全局变量必须前缀volatile关键字

//  用户的中断服务函数
void msDelayISR(void)
{
    msDelayFlag = TRUE;
}

//  延时初始化
void msDelayInit(void)
{
    sysTickInit();                              //  SysTick初始化
    sysTickIntRegist(msDelayISR);               //  注册中断,SysTick溢出时自动跳到msDelayISR()
    msDelayBase = sysTickClockGet() / 1000;     //  计算毫秒延时的时基
}

//  以毫秒为单位延时
void msDelay(uint32_t ms)
{
    sysTickLoadRun(msDelayBase);

    do {
        while (msDelayFlag == FALSE);
        msDelayFlag = FALSE;
    } while (--ms != 0);

    sysTickStop();
}

使用特权

评论回复
16
cdlxzlp520| | 2013-7-11 19:10 | 只看该作者
哈哈 好东西 一定是好东西的了

使用特权

评论回复
17
mmuuss586| | 2013-7-13 08:17 | 只看该作者

支持周。已经和你们申请样品了

使用特权

评论回复
18
linfeng24| | 2013-7-13 08:40 | 只看该作者
顶一个

使用特权

评论回复
19
rainbow99| | 2013-7-13 23:31 | 只看该作者
ST的库做的很不错,为啥说使用起来不方便?那么多人都用的好好的,搞不懂,包装成TI的库形式有什么意义。

使用特权

评论回复
评论
思渺 2021-12-22 11:05 回复TA
多学习总是没有错的,别杠那么多,好好学学 
20
周立功GD32|  楼主 | 2013-7-15 08:38 | 只看该作者
应用工程师想用好STM固件库必须要探究底层硬件才行,因为它不是面向上层应用的驱动库。
现在我做的这个库是从应用角度出发重新设计的函数接口,仅要求应用工程师对底层有个粗浅的了解即能熟练运用。

使用特权

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

本版积分规则

个人签名:GD兆易半导体——周立功单片机 www.zlgmcu.com/GigaDevice

5

主题

124

帖子

5

粉丝