本帖最后由 zhixiaoyuhong 于 2016-5-4 15:26 编辑
话接上贴,上贴说完IAR & MDK开发环境搭建之后,此回来说如何点亮LED。 其实说白了就是如何配置 STM32f030的IO罢了。。。说实话,说完开发环境就上LED,这步子有点大,有点担心会不会扯到蛋。入手一款新的mcu,首先要分析其三大要素的: 电源、复位、时钟。。。。 既然上回已经预告了这回的内容,我们就硬着头皮往上上吧,下回再说这三要素好吧。。。 要使用一款新片子,最起码要准备两样东西,一是参考手册,二是固件库使用说明,就是固件库里.chm格式的那个文件。上回已经搭建好了工程环境,这回我们在IAR下试着玩玩 开发板的LED。。。 将上回搭建好的工程拷贝一份出来,文件夹命名为LED,打开工程,打开stm32f0的参考手册和固件库帮助文件。首先查看下stm32f030的IO结构:
这个结构也没啥好说的,我一般都不看这个图,直接看寄存器。。。大家初学的话看看的好,可以对这个有个比较深的了解。。。 直接来寄存器吧,GPIOx_MODER寄存器是模式配置寄存器,从下图中可以看到,stm32f030的IO可以配置成输入模式、通用输出模式、复用功能和模拟模式四种。
下一个寄存器是输出类型寄存器:GPIOx_OTYPER寄存器,用来配置输出类型的,其实简单说就是配置IO的驱动电流的和逻辑电平的。手册上说可以配置成推挽和开漏两种模式,其实这年头 单片机的IO模式都差不多了,熟悉一种,其余的都很轻松就转过来了。要不说嘛,学单片机学的是思想,而不是单纯学某一款芯片或某一个系列的mcu。。。 再往下看还有GPIOx_OSPEEDR寄存器来控制IO的输出速度,也就是电平的翻转速度,这个可以配置三个级别,分别是低速、中速、高速。这个片子的参考手册有点不人性,要知道具体的数值还需要看具体芯片的数据手册。唉,真不爽,我是很懒的,但是这里还是勤快下,给大家查查,大家就知道了,我自己玩的话才不管具体数值呢,其实玩LED也不需要知道这么详细,主要就是满足下好奇心,了解就行。查阅stm32f030xx数据手册之后发现,这个芯片的IO翻转速度分别为2MHz、10MHz、50MHz,这个速度是极限值,还需要考虑引脚所接负载的电容特性,详细信息可以看数据手册,这种精确数值很少用到。我们就忽略吧。。。 下一个管事的寄存器是GPIOx_PUPDR寄存器,用来控制IO是否使用上下拉电阻。 还有两个数据寄存器就是读数据寄存器GPIOx_IDR和写数据寄存器GPIOx_ODR了,其余的寄存器这一节用的比较少,我们使用库操作的话可以不用关注,都被封装到库函数的最底层了。而且其余寄存器能实现的功能,都可以通过上面寄存器实现。
就这么点东西,说了这么多,还是直接写代码吧,这样最省事,最干脆了。。。写代码之前先看看开发板的 电路图吧,要不然要控制那些IO都不清楚。。。
这个图一看就明白了,板子上的LED1-LED4分别通过芯片的PA5/PC9/PC8/PC5控制着。这样吧,我们例程点亮所有LED就好,什么跑马灯、呼吸灯啥的就不玩了好吧。。。结合寄存器复位值和原理图可以知道,使PA5/PC9/PC8/PC5输出高电平即可验证并实现点亮所有LED的目的。知道要做什么了,然后往下走。
打开固件库的帮助说明,跟着图走:
打开main.c看看GPIO有的结构怎么定义和使用。
看了图就知道了。。。吐槽一句,f0系列的固件库做的真心不如f1系列的好用,使用f1系列的固件库那个爽,任何一个结构、元素之类的都可以索引到,而且相当详细。使用f0系列的固件库,要查询某功能函数的时候,只能苦逼的查xxx.c源文件了。。。 为了工程标准规范,在User目录下建立名为led.c和led.h的文件,并将led.c加入IAR工程目录中的User目录下。
led.c中包含头文件、编写IO初始化函数如下:
一定要注意最开头的两句,这两句是打开GPIOA和GPIOC的时钟,cortex-m系列由于引入了这个控制开关,可以随意控制任何一个片上资源的开关,达到了超低功耗的目的,在低功耗上,有些情况下,甚至和430等片子相抗衡。。。
写一个打开led的函数吧:
然后在led.h中输入内容:
够简单吧。。。
把main函数修改成:
就可以了,注意将调试器配置为st-link。。。
编译之后点击下载并调试按钮,就可以看到板子上的四个LED都亮了。。。
最后,调试的时候,stlink上的灯太亮了,而且是个双色灯不停地闪,晃得眼很不爽。。。最终效果图如下:
led篇到此为止,下篇请见:吃透stm32f030三要素。
|