151人参与 • 2024-08-06 • 算法
stm32cubemx 简介
stm32cubemx 是 st 意法半导体近几年来大力推荐的stm32 芯片图形化配置工具,目的就是为了方便开发者,允许用户使用图形化向导生成c 初始化代码,可以大大减轻开发工作,时间和费用,提高开发效率。stm32cubemx几乎覆盖了stm32 全系列芯片。
在cubemx上,通过傻瓜化的操作便能实现相关配置,最终能够生成c语言代码,支持多种工具链,比如mdk、iar for arm、truestudio等 省去了我们配置各种外设的时间,大大的节省了时间。
并且随着 st停止了标准库的更新,st官方大力推荐cubemx与hal库的使用,虽然现在还是标准库的主场,但是cubemx的使用率在逐年提高。
关于stm32cubemx的安装教程,可以参考其他博主的博客,在这里不进行讲述,注意英文路径即可
本文将讲述 stm32cube mx的界面介绍、基础设置配置、配置之后的简单使用,不同外设的使用将会在之后博客中详细介绍。
首先先看一下stm32cubemx 的主界面
新建工程一般选择中间的 access to mcu selector
如果有其他需求也可以选择其他的
首先新建工程,这里选择使用第一种新建工程的方式
如果芯片信息没有更新,会跳出更新界面,继续更新和跳过更新都行
接下来进入选择芯片界面
在(1)位置输入想要使用的芯片型号,在(2)位置选择详细的芯片类型,最后在(3)位置开始建立一个工程
创建完成之后进入下一个界面
在这个界面中有三个部分
(1)是mcu的外设选择界面,在这里选择使用的mcu外设资源
有两种排序方式: categories 种类选择 、 a-z 顺序选择
(2)是详细的外设配置界面,关于每个外设的详细参数都在这里配置
(3)是芯片设置预览界面,预览每个引脚在什么位置和配置了什么功能
另外 配置引脚相应的功能可以在(1)外设选择界面,也可以在(3)预览界面直接点击相应的引脚进行配置
例如想配置pc13引脚输出高电平,可以直接在(3)界面点击pc13引脚
由上图可知,pc13引脚可以配置为rtc时钟模式、输入模式、输出模式、以及中断模式等等,详细功能会在之后博客中介绍。
另外在配置界面,出现淡黄色表示为不可配置引脚,电源专用引脚以淡黄色突出显示。其引脚不可进行其他用途配置。
这种颜色表示配置了一个i/o口的功能,但是没有初始化相对应的外设功能 ,引脚处于no mode 状态,也就是引脚进行了资源分配,但是在详细配置界面没有初始化操作。
如果配置完成之后显示绿色,则表示配置成功。
接下来介绍一些工程中通用的配置操作:
将外部高速时钟(hse)配置为crystal/ceramic resonator(晶体/陶瓷谐振器),也就是使用外部晶振作为时钟源,外部低速时钟(lse)用不到,可以不配置。
如果不配置rcc时钟,则是默认使用内部高速时钟(hsi),这也将影响之后时钟树的配置。
推荐将rcc时钟配置外部晶振
debug :
默认是关闭的,如果不使用调试器关闭即可,即no debug;
在stm32cubemx的sys选项栏中有sw和jtag协议选项,用户可以根据需要选择相应的协议;
jtag调试接口(jtag-dp)需要5个引脚;cubemx中可选择5pin或4pin的jtag,5pin比4pin多了一个复位引脚。
sw调试接口(sw-dp)需要2个引脚。二者之间有复用引脚。sw调试端口采用同步串行协议:swclk引脚为从主机到从机的时钟信号;swdio为双向数据信号。
st-link采用的是sw调试接口,选择serial wire ;
j-link采用的是jtag调试接口,根据实际要求选择 jtag(4pin) 或者 jtag(5pin) ;
如果使用j-link 但是采用swd协议,也可以选择trace asynchronous sw ;
trace asynchronous sw 模式有时候也可以解决使用st-link 烧录之后无法烧录和调试的情况
为了避免一次烧录之后无法下一次烧录或者调试的情况, 推荐选择serial wire
如果在stm32cubemx中选择sw协议,mdk 也必须 选择sw协议。jtag协议配置也同理。否则会造成下载和调试失败。在实际项目中sw协议使用使用的比较多,速度更快,占用的引脚更少,推荐配置成sw协议,即serial wire模式;
system wake-up :
设置低功耗模式下的自动唤醒功能,通过引脚pa0。
timebase source :
一般指hal的时基,即hal库中的uwtick,用于实现hal_delay()以及作为各种timeout时钟的基准。一般情况下直接选择默认的sys tick(嘀嗒定时器)来维护sys timebase source即可,即直接放在systick_handler()中断服务函数中,也就是下面的hal_inctick()函数。
如果在前面rcc时钟配置中,选择使用外部晶振,在这里选择使用外部高速时钟模式(hse);如果没有配置rcc时钟,则使用默认的内部高速时钟(hsi);
然后配置pll锁相环,之后倍频更改系统主时钟;
推荐使用最大时钟频率,这里是72m
如果不清楚rcc时钟树,可以参考我之前写的一篇博客,stm32基础知识(三)-- 系统时钟rcc详解
快速配置最大时钟频率,可以直接修改(3)系统时钟,直接改成72m,然后回车就行
注意:项目路径和项目名称最好使用英文,否则后期可能会存在一些奇奇怪怪的错误
copy all used libraries into the project folder
将hal库的所有.c和.h都复制到所建工程中
优点:这样如果后续需要新增其他外设又可能不再用stm32cubemx的时候便会很方便
缺点: 体积大,编译时间相比于其他选项非常长
copy only the necessary library files
只复制所需要的.c和.h
优点:体积相对小,编译时间短,并且工程可复制拷贝
缺点: 新增外设时需要重新用stm32cubemx导入
add necessary library files as reference in the toolchain project configuration file
不复制文件,直接从软件包存放位置导入.c和.h
优点:体积小,比较节约硬盘空间
缺点: 复制到其他电脑上或者软件包位置改变,就需要修改相对应的路径
根据自己需求选择就行,一般来说第一个和第二个都行;
首先在上一个界面,打开文件夹和打开工程都可以;
打开工程文件以后,首先点击魔术棒进行设置;
在魔术棒设置界面,进入(1)debug界面,在(2)位置选择自己使用的下载器,然后进入(3)settings界面;
在settings界面 ,根据之前在stm32cubemx里面sys设置的,进行选择这里使用的sw还是jtag协议;
注意stm32cubemx 和 mkd 里面协议要一致,否则无法进行调试
代码书写
代码要写在 /* xx code begin*/ 和 /* xx code end*/ 之间,否则下次再stm32cubemx里面加东西,再生成工程的时候,就会把不在这个区域里面的代码删掉。
1、stm32能基于寄存器开发,直接对寄存器进行编程。基于寄存器编写的代码简练、执行效率高。但由于 stm32 微控制器的片上外设和寄存器数量太多,这种编程方式移植性差,寄存器编程比较复杂。
2、基于st官方的固件库进行开发。现在大部分stm32教程教的都是这种库函数开发,如正点原子,野火等。他相比寄存器开发更加简单,不需要记住每个寄存器的地址和名称,只要会调用st官方封装好的库函数进行编程就可以了。
3、基于stm32cubemx进行开发,使用的是st官方新推出的hal库,可以通过软件内设计好的图形化界面进行配置,软件自动生成生成配置代码,然后我们再在ide上面代码编写。
icp:使用swd接口进行烧录,如j-link烧录器和j-flash软件配合使用。
isp:使用引导程序(bootload)加上外围uart/usb等接口进行烧录。
iap:软件自身实现在线电擦除和编程的方法,不使用任何工具。程序通常分成两块,分别为引导程序和应用程序。
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论