完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
一、实验环境
1.编译器环境: 集成开发环境 :Keil MDK 5.22 系统环境 :Windows 10 专业版 1706 OS内部版本 :16299.125 PS:不必过于纠结集成开发环境的版本问题,最开始我在学习stm32时候,使用的是Keil4(一个蓝色的图标,不知道大家见过没有),开发环境只会一定程度上减轻工作量,但决定不了程序的核心,要想写出算法严谨、结构紧凑的程序,还得靠自己不断取学习和练习。 这里列举我这里的程序运行环境的参数,目的只是想告诉大家,程序能够执行,是离不开硬件的,无论嵌入式还是纯软的程序,日后出现问题,大家在论坛或者贴吧提问题时,带上自己的硬件环境,方便大家一起来解决问题。 2.硬件环境: 使用STM32F407VE最小系统板; PS:大家只有手中有一块STM32F4的单片机板子即可,我个人并不是很建议大家初学就去买某点某原子或者某火的开发板,我承认他们的产品算的上业界良心,但是,如果大家想真心吃透单片机的核心,建议还是离他们远一点,亲自动手才是学嵌入式的正确道路。 二、文件组织方式 如果大家有学过51单片机,毫无疑问,大家一定用过keil 4去搭建一个project,然后添加main.c函数,随着代码量的增加和结构的复杂度增加,使用模块化编程,添加.h文件,相互包含。 所有的学习路线都是正确的,因为51单片机过于简单(指的外设简单、寄存器简单),我们可以简单的去写一个启动文件,控制程序的执行过程(如从0000H处启动后,一个LJMP跳转到MAIN处执行用户程序,不好意思,这里稍微扯到了51的汇编代码,有兴趣的可以去了解一下)。 STM32则不一样,实际上包括NXP(原Freescale)的K60、XS128等等,这些单片机都是使用的ARM的内核,实际上不只单片机,ARM架构垄断了几乎真个移动端市场,大家用的手机,不管苹果三星,还是华为小米,没买一部,都有一定量的钱流入ARM公司。 PS:是不是很乱,一会一个ARM,那么ARM到底是什么? (1)。一个公司,名字是Advanced RISC Machine; (2).ARM公司开发的处理器,分为A-高端应用方向、R-实时性方向、M-低端控制方向; (3).ARM公司早期提出的架构,现在改为Cortex-X; 所以说,天下嵌入式是一家,皮不一样,心都是一样的。 有点扯远了,由于STM32所依托的内核过于庞大,加之不同的公司在ARM授权的内核上外扩了很多的外设(比如USART、以太网、CAN、TIM等),导致我们不可能再像学习51那样去搭建project,一个启动文件startup,或者是一个bootloader引导设置,其代码量都不是一星半点的。 好在ST公司以及ARM公司都考虑到了这一点,他们提供了我们想要的这些,作为用户,我们去裁剪、修改即可,把精力放在外设的调用以及模块组合上,不用频繁去造轮子。 好了,一系列组合图,介绍以下,STM32中文件的组合方式: 上图是在电脑中的文件的分类存放,都放在根目录下也是可以的,那样就不好查找了不是?简单介绍一下,这些是我自己分类的,是按照我的习惯来的。 clear.bat :这是一个批处理,我用它来删除一些过程文件,毕竟我比较懒。 BSP :板级支持包,我用它来存放外设的配置,比如usart、tim的配置。 CORE :内核文件,ST公司提供,实际上是一些启动文件,裁剪、修改会涉及到它。 FUNCTION :常用函数,我自己编写的,存放一些常用的函数,比如delay、字符串处理函数等。 HARDWARE :硬件模块,我自己编写的,存放设备模块的驱动文件,比如蓝牙、舵机、步进电机的驱动。 MDK :工程,只要记住这里面存放了一个project文件即可,其他的不需要关心。 OBJ :存放了编译、链接过程产生的文件,常用的是.hex和.map文件,以后使用到再细说。 OS :存放操作系统,单片机也是可以跑操作系统的,关于操作系统,有时间我们在说。 README :帮助文件,我自己编写的,存放修改说明和版权、引脚说明什么的,纯文本文档。 SYSLIB :ST官方提供的,固件库,用户通过固件库可以间接操作寄存器。 USER :存放用户程序,说白了就是主函数和中断服务函数,当然了如果接触了操作系统,我将操作系统的调用文件也放在这里。 好了,这就是文件夹下全部的介绍,大家可以下下来模板,仔细比对,稍微透露一下,子文件夹下的设计有特别之处,自行查找。 说完了工程在硬盘中的存放,再说一下在编辑器中的组织方式: 心细的同学可能已经发现了,这里的组织方式和硬盘里的存放几乎完全相同。 从上而下是一个树状管理结构,首先是一个工程组名(Template_stm32f407v),下面是工程名(Template_LJI),接下来是不同的文件夹,存放不同的文件。实际上这是跟实际相关的,要解决一个庞大的问题,需要不同工程相互协调,要实现一个工程的功能,需要不同的子设备相互协调。 但实际上,我们的工程组下往往只有一个工程就可以了,毕竟功能相对比较简单。 三、STM32程序的执行过程 我讲这个有点早了,不过实际上,我只是会简单介绍一下,说的太深我都很绕: 学过C语言的我们都知道,C语言的程序是从main函数开始执行的,但实际上,C语言用户编写的程序才是从main函数开始的,谭浩强先生编写的大学C语言教材上也明确说明了这一点,只是用着用着,把这一点忘记了。 探讨这个问题之前,我们在多聊几句: 1.程序是怎么执行的 ——不管叫啥,有个类似于PC的寄存器,用来指示下一周期要执行的指令地址,机器通过这个地址取指、译指,然后执行。 2.程序复位,或者上电后,这个PC值是多少 ——鬼知道,不同公司设计的不一样,反正芯片制造出来,就是固定的。 3.那么,机器是怎么找到用户编写的函数的 ——这里就用到了念叨了好久的启动文件,打开startup_stm32f40_41xxx.s,第177行: 不管能不看懂,首先第177行有个Reset_Handler,下面下面,出现了一个”__main”,好了,就是这么找到main函数的,说白了,就是人为设定的main这么一个函数,然后用户在main函数里调用其他子函数实际上,其他的C语言也是这样的。 PS:注意我注释掉的三行,以后我会在讲到,有兴趣可以思考下它们的作用,答对了没奖的。另外有能力的,阅读一下整个startup_stm32f40_41xxx.s文件,在执行mian函数之前,机器做了一系列准备工作,网上有段代码的解释的,有兴趣的可以自行了解。 说完了启动过程,就到了main函数这里: 我画几个图来表示接下来的过程: 1.首先时System_Init()函数,用来对系统时钟进行配置,这个函数是自定义的,即用户可以规定其功能,比如这里的这个,大家可以去System_Init()的定义处,我除了配置系统时钟,还把常用的delay函数相关配置配置了一下。 PS:关于如何去。 System_Init()的定义处,选中函数,双击全选,然后右键,出现一个菜单,选中”Go to the Definiton of xxxxx”,当然,也可使用快捷键(快捷键需要定义的)。 2.之后设置中断向量组,这个我会在讲中断时说明,这里不多介绍。 3.外设初始化,复位后,STM32F407VE的外设都是关闭的,如果我想使用usart进行串口打印,那么调用”BSP_USART_InitConfig(USART1, 115200, 1)”函数,用来开启usart1,开启后,就可以使用GPIOA-9和GPIOA-10来与电脑通信了。 4.最后是while(1)死循环,目的是让机器保持运行。当然也可以在while(1)中执行一些操作。 PS:如果大家用过Arduino单片机,while(1)循环好比loop,之前的所有操作就是setup。 四、STM32程序下载 关于程序烧录,或者说下载,STM32F407支持下载到不同的存储区,这里先介绍下载到flash区: 1.STM32F407VE系统板把boot0引脚接3.3V,插上下载器(我使用的是CH340) 2.打开烧录软件FlyMcu v0.188(注意版本号!!!) 注意:一定设置对,特别是使用一键下载的同学 另外,波特率不要太高,选择76800即可! 3.安装CH340驱动,在我压缩包里,和下载器在一起 4.选择程序文件,并简单配置下载完成后操作 5.点击”开始编程即可” 五、运行结果 打开串口监视器XCOM: 1.配置通信参数 2.打开串口 若无法查询到串口,重新安装CH340驱动,若仍无法解决,你的电脑串口可能坏了,插上鼠标看能否使用) 3.按下STM32FVE系统板上的复位按键 4.执行结束 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1641 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1562 浏览 1 评论
988 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
691 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1608 浏览 2 评论
1869浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
655浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
525浏览 3评论
541浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
514浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-26 11:16 , Processed in 0.929706 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号