深圳市鹏海达电子有限公司!为您提供电子元件等相关信息,敬请关注!
服务热线:0755-23997336 网站地图 XML

stm32填坑之旅一 - stm32f103c8t6点亮板载贴片蓝色LED

来源 : www.penghaida.com   发布时间 : 2021/1/23 8:00:00

转截请标明:

没有时间仅仅自身找的托词而已! 开场一定要精彩纷呈,要不然过路人不理睬!以下是笔者做为arm新手的填大坑之行

没有错,这一以前一直从业开发软件的笔者,逐渐搞硬件配置了,自然只是是数电!模电必须有很扎扎实实的电路基础,而笔者有的仅有“扎扎实实”的逻辑性基本。那为何笔者要逐渐搞硬件配置呢?实际上早在高校期内,笔者所属技术专业(电子计算机科学与技术)中就会有一门课就专业讲了硬件配置-手机软件的联接及其完成,只怪当时沒有好好学习,仅仅心中有那麼个印像,便是数字时钟驱动器时序逻辑电路去解决每一个命令随后进行全部逻辑性(自然,这一印像很重要,在arm中,数字时钟便是它的心血管!)。毕业之后很多年,物联网技术领域逐渐盛行,因此手痒痒了,光凭这一印像,逐渐下手了人生道路中的第一块板子——树莓派3B,用于干了一些小玩意,但那全是在linux的基本上做的,和开发软件没有什么差别,因此,这方面树莓派迄今都是在吃灰。第二块板子就是arduino,比树莓派略微有点儿难度系数了,沒有OS,且ram也仅有好几百KB,干了好多个demo后,发觉太依靠arduino的自然环境了,也不是C开发设计,并沒有真实触碰最底层,因此这方面arduino跟树莓派已经一起吃灰中。笔者的主编程语言是js,出自于对开发语言的娴熟,我无意间发觉了NodeMCU这个东西,发觉是块可以用lua脚本写逻辑性的板子,甚为开心,之后还烧录了espruino固定件和micropython固定件,盘玩了很久后总算還是去吃灰了!来看IoT领域并沒有这么简单,因此收调整心态搞主营业务了!直至上一月手头上没啥业务流程了,又逐渐手痒痒,查阅了avr和arm的利与弊后,最后挑选了arm,终究巨头的建议是想挑戰就选arm(实际上arduino板便是应用了avr构架的atmega集成ic)!因此逐渐淘宝之途。

笔者做为arm新手,不可以上去就搞批量(例如xx开发设计模块,xx集成化单片机开发板),一是贵,二是没必要。再三淘宝后,最后选中了stm32最划算的板子STM32f103c8t6,是国内的板子,应该是st受权过的板子,随后各种各样仿造。笔者入的是块灰黑色板子,如下图:

兴高采烈地拿了快递公司,兴高采烈地拆了快递公司,兴高采烈地拿USB线联接到电脑上,难堪的是没什么反映,USB信息内容里都没有一切st字眼的项,因此逐渐查阅各种各样材料才发觉,stm32f103x的microUSB口是作为开关电源和DFU烧录用的,因此又查了DFU的材料,发觉stm32f103x并沒有烧录dfu的适用固定件,因此 不能用DFU烧录,因此 還是要别的烧录方法!

在采坑#1后,我搜到stm32的此外二种烧录方法:JTag和st-link,JTag在淘宝上的价钱要几十块,而st-link则是10块左右,可是JTag比st-link要功能强大,因此坚决选了st-link,划算和爱瞎折腾才是硬道理(一位图拉丁人说)。因此在淘宝上又入了一个st-link v2,RMB10.5。

取得st-link后,才意识到stm板子上的引脚沒有电焊焊接,因此就把swd引脚和漏线引脚给电焊焊接到了。随后对着板子上的swd的引脚表明,联接到st-link相匹配的引脚!

在查阅材料的情况下,发觉大大部分开发人员用的电脑操作系统要不是Windows要不便是Linux的,而笔者用的macOS,又一个深坑逐渐闪过,我立即填一下吧。必须原材料:

随后就可以开心地玩乐了!开启clion,新创建一个新项目,选内嵌式stm32的那一个

建立新项目后,会全自动开启STM32CubeMX,或是手动式开启新项目中的ioc文档,在编写区要有一个连接能开启STM32CubeMX。

它默认设置建立的是STM32f030f4px的集成ic,在下面的实际操作中改动集成ic

随后在project manager中改动

途径改动了一次就不可以改动了哦!最终点一下右上方的generate code。回到clion后,便会同歩文档,发觉编码都形成了,点一下编译程序,竟然不费力气地成功了,甚为开心!

随后烧录,点一下运作,clion竟然出错了

原来是在线编辑器板子的环境变量沒有选中,必须再run/debug configuration中配备

这时候,笔者寻遍了全部目录都没找到stm32f103字眼的项,因此去各种各样查阅,在网上说并沒有stm32f1discovery的项,这一low-level的板子太杂了,必须用board/st_nucleo_f103rb.cfg才行。随后再点一下运作,嘿,竟然一堆鲜红色的文字,看得全身发麻

随后也是各种各样查阅,原先要改动board/st_nucleo_f103rb.cfg的配备

再运行,嘿,蓝灯竟然不闪了,可能是烧录成功了,由于鲜红色文字里没什么错误报告了。随后逐渐看新项目构造,依据笔者的工作经验,客户逻辑性的通道肯定是相近src,main这类字眼的文档中的,果真,在Src/main.c中找到通道。里边有很多注解,主要是用以STM32CubeMX形成编码所标识的,不必改动这种注解,不然会对代码生成造成危害的,你需要改动的就USER CODE字眼注解范畴内。果真找到蓝灯不闪动的缘故了,原来是main方式里的while里是空的,造成 沒有对蓝灯沒有做一切解决,蓝灯默认设置是灭的。因此逐渐查阅stm32相关GPIO的文本文档,能够应用hal库来实际操作

HAL_GPIO_TogglePin方式是转换io口的情况,第一个主要参数是io口的结合,第二个主要参数是实际结合中那一个口。那为什么是GPIOB和GPIO_PIN_12呢?

STM32f103c8t6板载的深蓝色LED肯定是能改动的,或是是有别的主要用途的。经细心查阅淘宝的那一个详细信息后,找到它的原理图

在图上,找到2个LED灯,一个是鲜红色LED,是接地装置的,长亮情况,标示插电情况。深蓝色LED则是连接到PB12,含意便是能够根据PB12的口来操纵这一蓝灯,因此,推论一下便是GPIOB和GPIO_PIN_12这两个主要参数了(实际上是根据数次写代码,在只有提醒备选目录中寻找的)。HAL_Delay当然便是廷时等候是多少ms的功效了!编码改动好啦,再运行,吧唧吧唧,没反应,蓝灯沒有闪都没有亮,咋回事?预估应该是狂闪的呀!

为何实际操作GPIO沒有反映呢?依然是查阅材料,在网上说必须配备GPIO,要不然用不上,随后得出了许多编码,黏贴进去后,全是拼写错误,哪些RCC沒有寻找这类的不正确,应该是库沒有引进进去造成 的,想include rcc库,結果在新项目中找不着rcc库,因此也是一番查阅。笔者这个时候就在想,我就用的hal库,是否会rcc也是相近hal的库呢,果真并不是!hal中也有rcc的一部分完成,因此 仅仅用hal库应当没有什么难题。随后就闲置了一段时间!

我回过头来,是否可以使用调节作用,由于st-link仿真器是有调节作用,因此又逐渐淘来!怎奈如何调节不起作用,GDB程序调试自始至终无法连接st-link:Error: init mode failed (unable to connect to the target)。可是在HAL_Init()上的中断点就能断到,每一次全是HAL_Init()走不过去,随后一步一步追踪进来调节,发觉在__HAL_AFIO_REMAP_SWJ_NOJTAG这一方式走不过去了,再升上就不行,因此依照__HAL_AFIO_REMAP_SWJ_NOJTAG关键字阅材料发觉,stm的调节是必须在STM32CubeMX中配备的,配备点在:SYS>Debug中

默认设置是No Debug,挑选Serial Wire后generate code一次再编译程序就能打开调节了!真是极致!

可是调节发觉,编码很极致啊(实际上内心都没有底,還是查了别的文本文档,猜疑板载的深蓝色LED并并不是PB12)。无意间想起来,在STM32CubeMX中配备调节的情况下,仿佛在右边的集成ic引脚图看到了PB这一贷款口子,果真,在集成ic引脚图上找到PB12,甚为开心啊!

随后把PB12的引脚设成GPIO_OUTPUT,随后generate code,再运行,总算,蓝灯逐渐闪动啦,舒适!细心查阅main.c,会发觉,实际上在配备引脚后,形成的编码的MX_GPIO_Init中多了一些编码,这种编码便是配备引脚用的!

到此,板载深蓝色LED总算闪动了,达到了总体目标!实际上,在全部填大坑全过程中,不仅所述的这些流程,也有别的许多坑,例如:

stlink命令行工具如何都复印出不来stm板子的信息内容,乃至把stlink的源代码clone出来,调节看过log,果真并不是stlink的难题!最终在其issue中找到回答,原先根据swd联接st-link的情况下,必须将boot0置1,便是要把boot0的跳线帽联接右边,boot1随便

包含烧录程序流程,初次联接都必须图中的联接,不然会报初始化失败的不正确!

写博怎能不写体会心得呢!世界上原本并沒有坑,仅仅进行实例教程太少,便拥有坑!实际上在全部填大坑全过程中,数最多的是查阅材料和试着,身旁没朋友学了或已经从业有关的工作中。