打印
[STM32F0]

“ST大本营”+STM32的学习 经

[复制链接]
954|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
偏爱番茄酱|  楼主 | 2017-7-29 10:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人以前学过51单片机,知道ARM这个东西后一直向往,最近终于入手一块“战舰V3 精英板”(买板子的时候,没注意看板子资源,看到“精英”二字,以为是STM32F103ZET6板子里面最牛的,而且看价格还不是最贵的,果断买了精英板),经过几天的C语言学习、keil安装及使用学习、Jlink使用学习、工程模板(基于固件库)建立……我的STM32学习终于走上正轨。之前听过别人分享如何学习STM32,其中强调了一点,就是加入一个论坛,在论坛中跟大家一起学习,共同进步,于是今天就开贴(以前水过,从来没发过贴),从零开始学习STM32(以前学过51,但是没了解过STM32,不知道算不算从零开始),记录我的学习历程,记录一个系统性地学习STM32的过程,以求跟坛友共同进步,同时以后传递给别人准备学STM32的人一些经验。
沙发
偏爱番茄酱|  楼主 | 2017-7-29 10:07 | 只看该作者
看了好多个小时的视频,又看了些书,视频里说学习STM32还是需要了解下寄存器的,于是我又去看了寄存器版本的教程和例程,对IO口相关的寄存器也有了一些了解;
开发环境建立及工程模板建立
1、安装keil5并安装ST包;
2、安装ST-Link驱动、J-Link驱动;
3、板子及ST-Link、J-Link测试;
4、建立自己的工程模板;

1、安装keil5并安装ST包:
    按照教程和自己的理解安装keil5,再安装了STM32F103器件库;
2、安装ST-Link驱动、J-Link驱动:
    买板子的时候顺便买了ST-Link,一拿到就安装了ST-Link的驱动;
后来又从别人那里拿了一个掉了固件的J-link修好了,
3、板子及ST-Link、J-Link测试;
4、建立自己的工程模板;

使用特权

评论回复
板凳
偏爱番茄酱|  楼主 | 2017-7-29 10:08 | 只看该作者
1、安装keil5并安装ST包:
    按照教程和自己的理解安装keil5,再安装了STM32F103器件库;
2、安装ST-Link驱动、J-Link驱动:
    买板子的时候顺便买了ST-Link,一拿到就安装了ST-Link的驱动;
   后来又从别人那里拿了一个掉了固件的J-link修好了,感觉J-Link厉害些,于是装了J-Link的驱动准备用J-Link;
3、板子及ST-Link、J-Link测试:
    用下载器下载了一个LED的程序,跑了一下,可用(顺便证明下载器是好的),之后看了视频,又下了综合测试程序进去跑了一下,大概用了下,感觉没什么问题(没花精力仔细了解),没有仔细测试,如果以后碰到问题,就解决问题;
4、建立自己的工程模板:
    按照开发指南建立工程模板,并且经过慎重考虑,还是把project文件新建一个PROJECT文件夹放在里面,USER文件夹里面只放代码,然后因为个人习惯,在模板文件夹目录里建一个相对路径快捷方式,指向这个project文件,以后要新建工程的时候,直接把整个文件夹复制,快捷方式的指向还是新工程;

使用特权

评论回复
地板
偏爱番茄酱|  楼主 | 2017-7-29 10:08 | 只看该作者
跑马灯

1、查看板子电路图,找到个LED分别连到MCU的IO口的哪个引脚;
2、查看原子跑马灯例程并理解过程(还不会STM32,先看着学,因为心急,还没看视频);
3、关掉例程,复制自己的空工程模板,写跑马灯代码;
4、仿真调试,思考总结,记录发帖;


1、查看板子电路图,找到个LED分别连到MCU的IO口的哪个引脚;
    我的板子是精英板:LED0->B5;LED1->E5;IO连接到LED阴极(IO口输出0点亮LED);
2、查看原子跑马灯例程并理解过程(还不会STM32,先看着学,因为心急,还没看视频);
    跑马灯程序编写思路:①配置IO口时钟->②配置IO口->③重复“LED0亮,LED1灭” <--> “LED0灭,LED1亮”两种状态切换,并在中间加适当延时;
3、复制自己的空工程模板,写跑马灯代码;
    直接写在main.c里面,以前听别人说这样的习惯不好,我准备调通了再学例程那样单独建个文件;

使用特权

评论回复
5
偏爱番茄酱|  楼主 | 2017-7-29 10:09 | 只看该作者
4、仿真调试;

    下载程序到板子上,发现没反应,怕自己没选择复位,就按下板子的复位,还是没反应,然后就去DEBUG,发现程序执行完配置IO口PB5那里后,IO口的PB5模式并没有变化,不得已,又打开例程,DEBUG,观察到执行配置PB5后,PB5模式变成想要设定的那样,然后我就把例程里的配置全部复制到我自己的工程里,一句一句地对,看自己是不是哪个字符写错了(虽然keil5没报错,但是第一次写程序,还是怕打错字),没有观察到哪里不一样,注释掉自己的,DEBUG例程那一段,PB5能正常配置,注释掉例程,DEBUG自己那一段,PB5不能正常配置,纳闷了,后面终于观察到“RCC_APB1PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOE , ENABLE);”这一句有问题,我怎么就复制个APB1的函数出来了,改成APB2,之后一切正常,自己的LED终于闪烁起来了;(之后去翻了下时钟系统相关的资料,知道了IO口是由APB2提供,不能有APB1提供)
    接下来就把LED的代码仿照例程“跑马灯”的样式写在一个led.c文件里,也仿照着写一个led.h文件(其实算是复制的),以后的工程里,就可以直接加入这个文件,使用LED了。

使用特权

评论回复
6
偏爱番茄酱|  楼主 | 2017-7-29 10:11 | 只看该作者
蜂鸣器
做完LED,心里想着蜂鸣器控制跟LED几乎是一个样,于是马上就开始写蜂鸣器程序跑;
1、查看板子电路图,找到蜂鸣器连到MCU的IO口的哪个引脚;
2、查看原子蜂鸣器例程并理解过程;
3、关掉例程,复制自己的空工程模板,写蜂鸣器代码;
4、仿真调试,思考总结,记录发帖;
1、查看板子电路图,找到蜂鸣器连到MCU的IO口的哪个引脚;
    精英板:BEEP -> PB8;
2、查看原子蜂鸣器例程并理解过程;
    程序跟LED几乎一样,就是换成了控制PB8拉高拉低(看例程的写法,猜测板子上的是有源蜂鸣器,所以直接给高低电平就可以啦);
    蜂鸣器程序编写思路:①配置IO口时钟->②配置IO口->③重复“蜂鸣器响” <--> “蜂鸣器不响”两种状态切换,并在中间加适当延时,顺便把LED闪烁加上去;
3、关掉例程,复制自己的空工程模板,写蜂鸣器代码;
    这次就直接新建beep.c和beep.h文件开始编(led.c和led.h也加到工程里),代码也直接从led文件里复制过来改一下(偷懒);
就这么一点一点的对stm32入了门,成为了现在他们眼中的高手!
只要认真 ** 钻研,人人都会成编程高手!

使用特权

评论回复
7
潜力变魅力| | 2017-7-29 12:34 | 只看该作者
网上拷贝的就不要来参加了吧!

使用特权

评论回复
8
mmuuss586| | 2017-7-29 14:38 | 只看该作者
感谢分享

使用特权

评论回复
9
lihongzhang| | 2018-5-3 20:58 | 只看该作者
楼主,视频资源可以分享一下吗,我的好像有点不全。

使用特权

评论回复
10
捉虫天师| | 2018-5-5 11:29 | 只看该作者
顶楼主,分享经验很好

使用特权

评论回复
11
heisexingqisi| | 2018-5-6 17:07 | 只看该作者
嗯,我也是从51开始上路的。

使用特权

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

本版积分规则

108

主题

807

帖子

12

粉丝