单片机开发的起点-点灯

开发的起点-点灯

  1. 前言:相比上位机的软件开发的起源《HelloWorld》而言,嵌入式开发一般是从点灯开始,也就是从点亮板子上LED灯,代表着整个单片机的最小系统可以运行起来了。按照惯例,我们也一样从点灯开始。
  2. 硬件环境:板子是我正在做的一个共享充电桩项目的设计,分了两部分,一块核心板跟一块底板,这里直接上单片机部分的原理图跟板子实物,目标就是点亮板子的LED1,并闪烁起来。

3

3.开发环境:常规的开发环境一般是Windows+Keil Mdk+Jlink,这个应该大家都很熟悉了,无论是在公司实际开发还是各种教程都是用这开发环境,这里不详述,随便找一份教程都有讲述。我这边使用是MacOS + Vscode+gcc+Jlink,全开源的开发环境,这里也不详述开发环境的搭建,需要的话单独来讲。

4.硬件连接:Jlink调试器跟板子的连接,现在芯片开发都是只用到SWD,也就是只连接4根线就可以了,分别是3.3V,SWDIO,SWCLK跟GND。之前还有JTAG接口目前基本已经没人有使用了,SWDIO也可以缩写成DIO或者DI,SWCLK缩写成CLK,CK。连接很简单,调试器上也有对应的线,一一对应连接上就可以了。需要注意的是有些调试器电源标的VCC,一定要确认VCC是3.3V还是5V,GD32、STM32这种M系列的MCU供电电压都是3.3V,5V就有可能烧坏MCU。

 

5.建立工程:在建立工程之前,我们要先找到对应的开发包,也就是库文件,最快最有效的方法就是直接对应芯片的官网上找,如果是STM32的话,可以用CubeMX软件来直接生成工程。怎么找官网,最快方法肯定是直接百度对应的MCU,GD32就是直接百度GD32,出来的第一条就是GD32的官网。在资料下载,找到对应的GD32F4系列,就可以看到

        《GD32F4xx Firmware Library》。我们板子的MCU是GD32F450VGH6,就是对应GD32F4这个系列,下载下来解压后解压后是:

       很多初学者都不知道哪里去找例程,其实每家芯片都把例程跟库函数放在一起了,在Examples就包含了所有外设的例程,是我们熟悉使用芯片的最重要的参考。Frimware里就是GD32F4相关的库文件,CMSIS是Cortex-M相关的,GD32F4xx_standard_peripheral就是GD32F4的标准外设库文件,GD32F4xx_usb_library就是对应的usb库文件。Template是工程模版,包括Keil跟IAR的,如果使用Keil MDK就可以直接打开里面的工程开始开发,我一般都是喜欢工程简洁,都会自己重新建立工程。

 

    新建gd32f450文件夹,复制库文件包目前所需要的文件CMSIS、GD32F4xx_standard_peripheral,新建User文件做为自己要开发的文件,复制Template里的文件过来,这里用gcc开发,没有使用IDE,则需要Makefile,GD32F450VHHx_FLASH.ld链接文件,startup_gd32f450xx.s启动文件,GD32官方没有GCC开发的模版,这三个文件都是我从STM32的Makefile工程里复制过来并修改成GD32的,如果是用Keil则不需要前面两个文件,启动文件对应不同的IDE(实际是编译器的不同)文件不同,Keil的启动文件是在CMSIS/GD/GD32F4xx/Source/ARM里,我们板子是F450就对应选用startup_gd32f450_470.s。

    整个最小工程需要编译的文件标准外设库的所有文件,main.c用户程序的入口、system_gd32f4xx.c芯片初始化文件、startup_gd32f450xx.s启动文件。

        还有对应头文件目录跟全局宏定义。

       工程文件已经搞完了,首先编译看下没有错误。Shell里在工程的根目录下make下,这里执行make -j8后提示在main.c文件的第39行找不到gd32f450i_eval.h这个文件。我们

    用不到这个文件,直接在main.c里删除这行后,再执行make -j8后还是报错,找到LED1

的声明,一样先删除LED1相关的代码,最后只留下

继续make -j8,这时已经编译成功,生成的工程文件。如果还是有错误,我们继续看提示,

删除错误相关的代码,都是增加是提示减少的文件,不要先纠结怎么去解决这些错误,我们先要迅速先让编译能正常通过。

  1. 开发调试:工程已经成功建立好了,到了我们开始实现目标的时刻。

要点LED1,我们需要是让连接MCU的PA8引脚输出低电平,最快最有效的开发方式就是复制例程再修改,点亮LED实际就是要控制MCU的对应GPIO外设输出低平,在库文件里找到对应的例程,打开例程里的main.c文件,发现到里面的内容并不是我们所需要的,

但是指向了gd32f450z_eval.c这个文件。这里也就是GPIO一些简单外设的例程是直接调用的GD32官方开发板的工程代码,打开Utilities/gd32f450z_eval.c,找到gd_eval_led_init

这个函数,复制函数里的内容到自己工程的main函数里再修改成

PA8就是对应GPIOA的第8引脚GPIO_PIN_8,目前我们只关系注释的内容就好,GPIO的使用流程就是打开对应GPIO的时钟->配置GPIO引脚的工作模式->控制GPIO输出电平,所有的Cortex-M都是这套路,其它的MCU也是基本相同,只是用的库文件不一样。我们make -j8后没有错误,用Make downjl控制jlink把编译出来的程序下载到板子上,板子上的LED1就已经亮起来了。我们再进一步让LED1闪烁起来,要实现起来就是控制PA8输

出高电平->延时->控制PA8输出低电平->延时后无聊循环,在while增加代码

重新编译再下载后就可以看到LED1已经闪烁起来了,再简化下代码,我们可以调用

直接翻转PA8的电平,就可以简化成如下,编译下载后可以看到板子是一样的效果。

  1. 延伸:1)每个项目开发硬件上都需要设计至少一个LED,用来做代码的运行指示,在调试或者是在产品的维护过程直接看板子上LED有无闪烁就可以很直观的判断到MCU是不是在正常工作,程序是不是在正常运行。

2)如果把代码成如下,编译下载后发现LED1不闪烁,对很多新手来说会认为

是不是代码有问题导致没有达到效果,这里实际是因为LED1闪烁太快,由于视觉暂留时间的问题,眼睛分辩不出来而已。

3)

GPIO_BC(GPIOA) = GPIO_PIN_8;//控制PA8输出低电平

gpio_bit_reset(GPIOA,GPIO_PIN_8);//控制PA8输出低电平

这两句都控制PA8输出低,第一句是直接操作的寄存器,第二句是用的库函数至于两者的区别,什么时候用库函数,什么时候用寄存器,后面专题来讲解。

8、本次课程的源代码在https://gitee.com/mzwhhwj/gd32f450.git中的Lesson01

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值