打印
[STM32F7]

从零开始编写移动机器人下位机(stm32)程序

[复制链接]
255|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
甲虫666|  楼主 | 2022-11-18 15:45 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
写这篇文章的时候是研一上学期寒假前的一周,希望通过写这类文章能帮助自己理清移动机器人的整体脉络,为之后的课题及研究打下坚实的基础。我本身也是移动机器人和自动驾驶控制方向的小白,所以有任何不妥的地方,欢迎批评指正。(注:该文章并非所有内容都是原创,部分内容借鉴了各位前辈的优秀内容,如有侵权,请联系我删除!)
一、keil5工程文件创建
最终的工程文件如下图所示:


使用特权

评论回复
评论
甲虫666 2022-11-18 15:46 回复TA
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/weixin_56492465/article/details/122545387 ———————————————— 版权声明:本文为CSDN博主「秋日的动物园」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/weixin_56492465/article/details/122545387 
沙发
甲虫666|  楼主 | 2022-11-18 15:47 | 只看该作者
下面,我来依次介绍各个工程文件的作用及内容:

1.CORE文件夹

可以看到,这个文件夹存放的是固件库核心文件和启动文件,这个文件夹的内容一般不需要修改,直接在标准库复制即可。

使用特权

评论回复
板凳
甲虫666|  楼主 | 2022-11-18 15:48 | 只看该作者
OBJ文件夹

这个文件夹一般是存放编译时的过程文件以及hex文件

使用特权

评论回复
地板
甲虫666|  楼主 | 2022-11-18 15:48 | 只看该作者
FWLIB文件夹

这个文件夹有两个子文件夹,一个是inc(存放头文件),另一个是src(存放源文件)

可以清晰的看到,这里的文件都是官方固件库的外设文件。

使用特权

评论回复
5
甲虫666|  楼主 | 2022-11-18 15:49 | 只看该作者
SYSTEM文件夹

这个文件夹存放常用的共用代码,是STM32F10x系列的底层核心驱动函数。包含了延时函数(delay),GPIO口位带操作(sys),及串口相关函数(usart),一般不需要修改即可以在任意STM32F10x系列芯片使用。

使用特权

评论回复
6
甲虫666|  楼主 | 2022-11-18 15:50 | 只看该作者
USER文件夹

这里需要解释一下该文件夹中的子文件的作用:

stm32f10x_conf.h:用来配置库的头文件(增加或删除Driver目录下的外设驱动函数库)

stm32f10x_it.h:和中断相关的函数都在这个文件编写

stm32f10x.h:系统寄存器定义声明以及包装内存操作

使用特权

评论回复
7
甲虫666|  楼主 | 2022-11-18 15:51 | 只看该作者
mbot文件夹

涉及到小车在单片机层面内部逻辑操作的所有文件都包含在这里

control文件夹:所有的控制代码都在该文件夹下

DataScope文件夹:数据转换文件,将单精度浮点数据转换成4字节数据并存入指定地址

motor文件夹:设置左右电机PWM值

PID文件夹:用于传入PID控制

SG90文件夹:舵机

使用特权

评论回复
8
甲虫666|  楼主 | 2022-11-18 15:51 | 只看该作者
Mbot_HARDWARE文件夹

涉及到小车与单片机相连的所有硬件模块的初始化设置都在该文件夹中(文件夹功能显而易见)

使用特权

评论回复
9
甲虫666|  楼主 | 2022-11-18 15:52 | 只看该作者
下面做一个小总结:

工程必须文件有如下几个:

core_cm3.c   core_cm3.h  (为stm32所使用的Cortex-M3核设计的芯片外设提供进入接口)

system_stm32f10x.c  system_stm32f10x.h (为f10系列32设置系统内容及总线时钟)

stm32f10x_it.c  stm32f10x_it.h  (若需要配置中断函数,应该设置该文件)

stm32f10x_conf.h (这个文件已经将stm32f10x系列芯片涉及到的外设头文件全部组织在一起(全部注释掉了,用的时候需要解注释))

stm32f10x.h(用于定义器件、中断线、数据类型、结构体封装的寄存器、寄存器地址映射、寄存器位操作以及防C++编译的条件编译)

使用特权

评论回复
10
甲虫666|  楼主 | 2022-11-18 15:56 | 只看该作者
外设库函数包含:

misc.c(外设对内核中包含的NVIC(中断向量控制器)的访问函数,如果需要配置中断,需要加入该函数)

stm32f10x_adc.c  (模拟/数字转换)

stm32f10x_bkp.c  (备份寄存器)

stm32f10x_can.c  (局域网模块)

stm32f10x_cec.c  (CEC网络模块)

stm32f10x_crc.c  (CRC计算单元)

stm32f10x_dac.c  (数模转换器)

stm32f10x_dbgmcu.c  (提供了所有DBGMCU固件功能)

stm32f10x_dma.c  (直接内存存取控制器)

stm32f10x_exit.c  (外部中断时间控制器)

stm32f10x_flash.c  (闪存储存器)

stm32f10x_gpio.c  (通用输入输出)

stm32f10x_i2c.c  (内部集成电路)

stm32f10x_iwdg.c  (独立看门狗)

stm32f10x_pwr.c  (电源/功耗控制)

stm32f10x_rcc.c  (复位与时钟控制器)

stm32f10x_rtc.c  (实时时钟)

stm32f10x_sdio.c  (SD卡接口)

stm32f10x_spi.c  (串行外接口)

stm32f10x_tim.c  (通用定时器)

stm32f10x_usart.c  (串口:通用同步异步接收发射端)

stm32f10x_wwdg.c  (窗口看门狗)

使用特权

评论回复
11
甲虫666|  楼主 | 2022-11-18 16:03 | 只看该作者
最后再介绍一下stm32的启动文件,它是根据你所使用的stm32的不同规格去设置的:

具体使用哪一款,需要去手册查询,在此不做赘述

​startup_stm32f10x_cl.s   startup_stm32f10x_hd.s   startup_stm32f10x_hd_vl.s

startup_stm32f10x_ld.s    startup_stm32f10x_ld_vl.s   startup_stm32f10x_md.s   

startup_stm32f10x_md_vl.s   startup_stm32f10x_xl.s  

启动文件是认可处理器在上电复位后最先运行的一段汇编程序,在我们编写的C语言代码运行之前,需要由汇编语言为C语言的运行建立一个合适的环境,接下来才能运行我们的程序。

使用特权

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

本版积分规则

6

主题

131

帖子

0

粉丝