STM32CubeMx 创建第一个工程

    工欲利其事,必先利其器,今天就先来利一利STM32CubeMx这个器吧;

    先说一下STM32CubeMx是干啥子的吧,它能帮你建工程,生成部分代码,你只要往相应的代码里面添加你的功能便可以了,总之,它可以减少你的工作量就对了; 

1.下载安装

    a.下载安装JRE:STM32CubeMx是基于JAVA运行的,所以要先下载安装JRE,地址:http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html

        

        总有一款适合你,或者上我的百度网盘下载也行;

        链接:https://pan.baidu.com/s/19usUcgZPX8cCRTKt_NPcfg 密码:07on

        安装请点下一步->下一步->下一步...->完成;全程使用默认;

        b.下载安装STM32CubeMx:

        www.st.com,搜一下STM32CubeMx便能下载;或者上我的百度网盘下也行;

        链接:https://pan.baidu.com/s/19usUcgZPX8cCRTKt_NPcfg 密码:07on

        安装同样请点下一步->下一步...->完成;全程使用默认;

2.安装库:STM32CubeMx需要相对应的芯片库;

    下载安装完成后,打开STM32CubeMx,使用前,要先安装一下STM32CubeMx的库,我们就用在线安装吧,比较简单:

    Help->Manage embedded software packages Alt+U      

    弹出如下图所示的界面:1.选择你的芯片->2.选一个你喜欢的库版本->3.点"Install Now"           等。。。等。。。等。。。过程可能有点漫长,视网络而定。。

3.应用

    我们就来做一个简单的应用吧,控制GPIO 灯闪烁的程序;

    打开Stm32CubeMx,界面长这样子,点New Project: 

   

    点New Project后,弹出如下界面:

        1)、给你选芯片的,可以一级级往下选,也可以直接搜索里面搜索你的芯片;这个软件超好用,不仅能减轻软件工程师的工作量,也适合于应件工程师做芯片选型;

        2)、芯片简单介绍;

        3)、芯片主要特征,型号,flash,封装,RAM,IO个数,频率,连10K片价格都有,这货不仅方便软件工程师建项目,也方便硬件工程师做芯片选型,一目了然;

    看板子原理图,选的是STM32F207IGT6,软件工程师不仅要会敲代码,还要会查原理图,这点很重要;

    选芯片,可以直接在Part Number Search栏搜,也可以自已一级一级点选,Core是核,Series是系列,Line选型号,Package选封装,选好后,点Start Project;

    点Start Project后,弹出如下界面:

        1)、Pinout:管脚配置;

        2)、Clock Configuration:时钟配置;

        3)、设置中间层,比如实时操作系统,网络协议栈等(后面有空再讲,LED也就几个GPIO口,不用那么复杂);

        4)、外设,如ADC,串口,I2C,SPI配置等,这项目配几个GPIO也不需要用到;

我们先来配一下时钟,

        5)、可以在这里直接配置管脚,我们稍等会要把GPIO配置成输出脚;

    我们先来配一下时钟,鼠标点击 Clock Configuration 页,

    点击 Clock Configuration 页后,页面变成这样子的,我们直接在HCLK位置上填上120吧,也就是配个120MHz的系统频率,我们平常说的Intel XXX 的CPU牛逼,主频多高多高,就是这个,其实也可以设置成别的值,只要<120MHz就行了;至于如何选择时钟源,如何设置倍频,分频等等,我们不需要参与,软件自动给我们设置好了;

    配完时钟后,我们点回Pinout页,开始配引脚吧,具体用哪个引脚呢?当然是看原理图,软件工程师要学会看原理图,查找原理图,重要的事情要说三遍,三遍,三遍;什么?你没原理图?找硬件工程师要去;

    打开原理图,看图说话,图中告诉我们,JTAG,KEY,LED在11页;

  

    翻到第11页,看到这几个LED灯了吧?在原理图上搜一下LED_R,LED_G,LED_O,LED_B分别连到STM32哪个引脚?

    LED_R = PD12,LED_G = PG6,LED_O = PG8,LED_B = PC7;我们就把这4根引脚配置成输出管脚吧,看图,没有上拉3.3V,就用推挽输出吧(pull);

  

知道要配哪些引脚了,我们可以开始配了,回到STM32CubeMx界面上,点Pinout,

在芯片这个页面,可以用鼠标滚轮放大缩小,可以拖动,找到这几个脚,点左键,把它们都配成GPIO_Output;

    配完所有所需要的引脚后,点Configuration,看到GPIO了吧?这就是我们刚刚配的GPIO口,点它;

    我们可以看到GPIO的详细配置界面:

    GPIO output level:IO口初始状态,高电平/低电平;

    GPIO mode:Push/OpenDrain,也就是推挽和漏极开路,OD模式需要接上拉,一般驱动能力不够时用,看原理图中没上拉,那就选个推挽吧;

     简单地说一说推挽和开路吧,

     推挽:可以理解为高电平就输出高电平,低电平就输出低电平,不需要外部3.3V做上拉;

     开路,就理解为低电平时,把它接地,高电平时,把芯片管脚断掉,所以需要上拉个3.3V;

     GPIO Pull-up/Pull-down:如果设置为推挽输出,就要选不拉;

     Maximum output speed:GPIO控制LED灯,随便选一个吧;

    设置完成后,点OK;配置完成!

    接下来,生成代码咯,Project -> Settings...

        

    弹出这样一个界面

    这里有三页,我们只设置几个参数便可,其他的默认;

    Project Name:项目名

    Project Location:项目目录

    ToolChain / IDE:集成开发环境,我用的是 Keil Arm V4;

    其他的全默认;

    其余的两页,可以了解下,

    Code Generator:代码生成风格,比如,是否把库全部生成进项目,还是部分等;

    Advanced Setting:高级设置,库设置等,用什么库,就用HAL吧,还有个LL库,后面有空面介绍这两个库吧;

    设置完成后,点OK;

        

        接下来:Project -> Generate Code,然后,等呀等呀等呀~~~ 好了!

        好了之后,会弹出个对话框,

        要打开目录,还是打开项目,还是关闭,自个选吧;

        我们就选打开项目吧;

    打开后项目是这样子的:

    看到熟悉的main()了吧?要添加/修改的代码,就在main里面!

    配置的系统时钟,就在 SystemClock_Config(); 里面;

    配置的GPIO,就在 MX_GPIO_Init(); 里面;

           

    我们接下来,就在while(1) 里面添加个 LedHandler(); 让Led闪灯;第106行,LedHandler();主循环会不断地执行这个函数;  

 

    看下LedHandler()函数的实现,程序设定了一个定时器,1000ms时间到了GPIO反转一次,程序使用HAL库,是ST弄出来的,库会对一些寄存器操作封装起来,用起来比较直观,有兴趣的同学可以看一下库的代码,最根本也是对寄存器的操作;

    说一下题外话,在PIC,51时代,很多人喜欢直接用地址操作寄存器,少去一些诸如调用函数的入栈,出栈等操作,效率也相对提高了;但现在,用的120MHz的MCU,还是三级流水线的,对于这点代码时间的差别,已微乎其微,Who Care?个人还是比较喜欢使用库,标准库也好,HAL库也好,LL库也好,总之,能够提高开发效率,增强代码可读性的事儿,能用就用!

    写好了吧?保存,编译,烧录,重上电/复位,看,这4个灯,闪起来了!!!上个图,呃,抱歉了,图看不到闪烁,那请自行想象吧~~~

    整个工程及代码呢,请上百度网盘上下载咯;

    链接:https://pan.baidu.com/s/19usUcgZPX8cCRTKt_NPcfg 密码:07on

    在Code/LedTest文件夹里面;

下一篇:《STM32 Uart及其配置

猜你喜欢

转载自blog.csdn.net/ForeverIT/article/details/80959327