有方机器人 STM32智能小车 项目学习笔记2

这篇具有很好参考价值的文章主要介绍了有方机器人 STM32智能小车 项目学习笔记2。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

今天是学习有方机器人课程的第二天,通过课程复习GPIO相关知识点,很有收获,老师讲的非常好!


处理器控制硬件原理

有方机器人 STM32智能小车 项目学习笔记2,学习,笔记,stm32,单片机,有方机器人,Keil5

处理器在日常工作时有两种功能,第一个是负责基本的数据运算和逻辑运算,第二是控制硬件外设。

对于处理器来说,正常工作时需要去运行程序,而处理器本身只能运行程序,不能存储程序,程序是存储在内部的只读存储器(ROM)中,处理器如何执行程序呢?从ROM里读一条执行一条程序,程序中涉及到的运算就通过RSV来执行,运算结果的数据就存在了RAM里面;

RAM和ROM最大的区别就是RAM掉电后就丢失数据,ROM掉电后不丢失,下次上电后依旧运行之前的程序。

RAM:随机存取存储器(random access memory),又称作“随机存储器”,是与CPU直接交换数据的内部存储器,也叫主存(内存)。

ROM:只读存储器(Read Only Memory),是一种只能读出事先所存的数据的固态半导体存储器。ROM中所存数据稳定,一旦存储数据就再也无法将之改变或者删除,断电后所存数据也不会消失。其结构简单,因而常用于存储各种固化程序和数据。

处理器不只是简单的进行数据运算操作,还要进行复杂的控制硬件外设操作

处理器如何控制硬件外设呢?由于CPU 本身是不能直接控制硬件的,硬件一般由其对应的控制器来控制,每一个硬件控制器内部都有其自己的寄存器,开发人员通过向某一硬件控制器内部的寄存器写入特定的值配置该寄存器,依次到达控制该硬件控制器的目的。

在处理器中将各个硬件控制器映射到了 CPU 地址空间中的一段范围,这样 CPU 就可以通过读写寄存器来间接控制硬件。通过IO来实现。比如开发人员想要控制GPIO,需要往GPIO内部寄存器中写入特定的值来配置寄存器,配置好后硬件就会实现对应的功能。

硬件寄存器的本质就是存储器,把开发人员写入的值存在里面,这样硬件就会按照写入值得寄存器的功能执行相应的工作,开发人员通过写入或读取相应寄存器实现数据交互过程,相当于与单片机进行“对话”。

对于处理器来讲,读取存储器里的数据有一个范围,这个范围就是由处理器内部的地址空间决定,对于RAM32位处理器来说,它的读写的范围就是2的32次方=4G,即地址空间大小=4G。

当我们要控制某一外设时,往对应寄存器中写入一个值就可以,以上就是处理器控制硬件原理。

地址映射表

处理器分配地址空间的这一过程就叫做映射,把相应外设寄存器对应的地址映射到处理器的内部地址空间中。在一个处理器中,一般会将 ROM、RAM、寄存器存储设备分别映射到寻址空间中的不
同地址段,我们将这个映射关系称为处理器的地址映射表。简单的来说就是处理器读取程序就去 ROM 对应的地址段读取,存储数据就到 RAM 对应的地址段存储,控制硬件控制器就到其内部的寄存器所对应的地址段进行读写操作,而 ROM、RAM、寄存器这三者的地址段会形成一张表,将其称为处理器的地址映射表。有方机器人 STM32智能小车 项目学习笔记2,学习,笔记,stm32,单片机,有方机器人,Keil5

有方机器人 STM32智能小车 项目学习笔记2,学习,笔记,stm32,单片机,有方机器人,Keil5

有方机器人 STM32智能小车 项目学习笔记2,学习,笔记,stm32,单片机,有方机器人,Keil5

启动模式

程序通过ST-Link下载到ROM里,启动模式为主闪存存储模式。

有方机器人 STM32智能小车 项目学习笔记2,学习,笔记,stm32,单片机,有方机器人,Keil5

STM32F10X.H 头文件 

STM32F10X 系列单片机内部的寄存器数量多且复杂,而此文件是对 STM32 寄存器地址、结构体类型定义的底层头文件,由ST 公司提供,使用 STM32 库时都要包含该文件。

GPIO 的输入输出

有方机器人 STM32智能小车 项目学习笔记2,学习,笔记,stm32,单片机,有方机器人,Keil5

通过参考手册,我们知道GPIO的内部结构如下。有方机器人 STM32智能小车 项目学习笔记2,学习,笔记,stm32,单片机,有方机器人,Keil5

输出:

开漏模式下,输出驱动器的P-MOS管失效,当写入0到对应寄存器时,输出控制会响应寄存器里的配置,由于N-MOS管导通,IO引脚被拉低;当写入1时,由于P-MOS失效,呈现高阻态,需要外接上拉电阻才能把IO引脚拉高。低电平有驱动能力,高电平呈高阻态无驱动能力。

推挽模式下,P-MOS和N-MOS都是有效的。写入1,IO引脚拉高;写入0,IO引脚拉低。低电平和高电平都有效有驱动能力

输入:

模拟输入不经过TTL施密特触发器,施密特触发器本质上来讲就是用来滤波,当信号高于上限值就转换为高电平,低于下限值为低电平。

复用功能输入通过TTL施密特触发器,达到一个滤波的作用。

IO引脚处的两个二极管,起到保护电路的作用。

代码部分(知识点查漏补充)

1、 在对应外设的.h文件里,能找到该外设所有封装函数声明。有方机器人 STM32智能小车 项目学习笔记2,学习,笔记,stm32,单片机,有方机器人,Keil5

/**
  * @brief  Writes data to the specified GPIO data port.
  * @param  GPIOx: where x can be (A..G) to select the GPIO peripheral.
  * @param  PortVal: specifies the value to be written to the port output data register.
  * @retval None
  */
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal)
{
  /* Check the parameters */
  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
  
  GPIOx->ODR = PortVal;
}


void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal)
{
  /* Check the parameters */
  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
  assert_param(IS_GET_GPIO_PIN(GPIO_Pin));
  assert_param(IS_GPIO_BIT_ACTION(BitVal)); 
  
  if (BitVal != Bit_RESET)
  {
    GPIOx->BSRR = GPIO_Pin;
  }
  else
  {
    GPIOx->BRR = GPIO_Pin;
  }
}

GPIO_Write,是控制GPIOx的所有引脚;GPIO_Write(GPIOA, 0xfeff),表示ODR寄存器的第8位写0,其他15位都为1。

GPIO_WriteBit,是设置GPIOx中某一个引脚的置位或清除,单独对某一个IO口进行配置。

2、可以用GPIO_WriteBit 代替GPIO_SetBits或GPIO_ResetBits。

通过assert_param(),里面的参数,双击选中之后按F12,进行跳转,可以看到对应寄存器的操作。

/**
  * @brief  Sets the selected data port bits.
  * @param  GPIOx: where x can be (A..G) to select the GPIO peripheral.
  * @param  GPIO_Pin: specifies the port bits to be written.
  *   This parameter can be any combination of GPIO_Pin_x where x can be (0..15).
  * @retval None
  */
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
  /* Check the parameters */
  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
  assert_param(IS_GPIO_PIN(GPIO_Pin));
  
  GPIOx->BSRR = GPIO_Pin;
}

/**
  * @brief  Clears the selected data port bits.
  * @param  GPIOx: where x can be (A..G) to select the GPIO peripheral.
  * @param  GPIO_Pin: specifies the port bits to be written.
  *   This parameter can be any combination of GPIO_Pin_x where x can be (0..15).
  * @retval None
  */
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
  /* Check the parameters */
  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
  assert_param(IS_GPIO_PIN(GPIO_Pin));
  
  GPIOx->BRR = GPIO_Pin;
}

有方机器人 STM32智能小车 项目学习笔记2,学习,笔记,stm32,单片机,有方机器人,Keil5

有方机器人 STM32智能小车 项目学习笔记2,学习,笔记,stm32,单片机,有方机器人,Keil53、 GPIO_Pin_All代表对所有的引脚都进行定义。

#define GPIO_Pin_0                 ((uint16_t)0x0001)  /*!< Pin 0 selected */
#define GPIO_Pin_1                 ((uint16_t)0x0002)  /*!< Pin 1 selected */
#define GPIO_Pin_2                 ((uint16_t)0x0004)  /*!< Pin 2 selected */
#define GPIO_Pin_3                 ((uint16_t)0x0008)  /*!< Pin 3 selected */
#define GPIO_Pin_4                 ((uint16_t)0x0010)  /*!< Pin 4 selected */
#define GPIO_Pin_5                 ((uint16_t)0x0020)  /*!< Pin 5 selected */
#define GPIO_Pin_6                 ((uint16_t)0x0040)  /*!< Pin 6 selected */
#define GPIO_Pin_7                 ((uint16_t)0x0080)  /*!< Pin 7 selected */
#define GPIO_Pin_8                 ((uint16_t)0x0100)  /*!< Pin 8 selected */
#define GPIO_Pin_9                 ((uint16_t)0x0200)  /*!< Pin 9 selected */
#define GPIO_Pin_10                ((uint16_t)0x0400)  /*!< Pin 10 selected */
#define GPIO_Pin_11                ((uint16_t)0x0800)  /*!< Pin 11 selected */
#define GPIO_Pin_12                ((uint16_t)0x1000)  /*!< Pin 12 selected */
#define GPIO_Pin_13                ((uint16_t)0x2000)  /*!< Pin 13 selected */
#define GPIO_Pin_14                ((uint16_t)0x4000)  /*!< Pin 14 selected */
#define GPIO_Pin_15                ((uint16_t)0x8000)  /*!< Pin 15 selected */
#define GPIO_Pin_All               ((uint16_t)0xFFFF)  /*!< All pins selected */

4、当端口需要复用时,要配置复用功能,并开启AFIO时钟。

void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState)
/* 
 * @brief 表示改变指定引脚的映射,即复用功能
   @param GPIO_Remap: 选择要重新映射的引脚。
   @param NewState: 端口引脚重新映射的新状态。 ENABLE or DISABLE.
 */

有方机器人 STM32智能小车 项目学习笔记2,学习,笔记,stm32,单片机,有方机器人,Keil5


今天学习了P2-P6的视频,完成笔记并补充疏漏知识点!

STM32 开发板+智能小车 入门课程+项目 


本人博客仅代表个人见解方便记录成长笔记。

若有不足,请指出,感谢您的阅读!文章来源地址https://www.toymoban.com/news/detail-836914.html

到了这里,关于有方机器人 STM32智能小车 项目学习笔记2的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 机器人制作开源方案 | 智能盲道除雪小车

    作者: 汪荣顺 李明旭 马晓乐 吴泽俊 李以陈 单位:江汉大学 指导老师: 张朝刚 张会利       本文论述了一种新型智能盲道除雪小车的设计与研发。由于目前的除雪设备集中在公路、城市道路、机场路面、高速公路等领域,但对于街道等路况的研究很少。因此,我们针对盲

    2024年02月02日
    浏览(37)
  • 机器人制作开源方案 | 智能循迹避障小车

    作者: 刘元青、邹海峰、付志伟、秦怀远、牛文进 单位: 哈尔滨信息工程学院 指导老师: 姚清元       智能小车是移动式机器人的重要组成部分,而移动机器人不仅能够在经济、国防、教育、文化和生活中起到越来越大的作用,也是研究复杂智能行为的产生、探索人类思

    2024年01月16日
    浏览(46)
  • stm32毕设分享 单片机 图像分类 智能识别机器人 - 物联网 深度学习 AI

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年01月16日
    浏览(67)
  • 毕业设计 嵌入式 stm32智能扫地机器人设计与实现 - 单片机 物联网

    Hi,大家好,学长今天向大家介绍一个 单片机项目,大家可用于 课程设计 或 毕业设计 基于stm32的智能扫地机器人设计与实现 随着人口老龄化的到来和人民对提升生活品质的需要, 人们对在现实生活场景中取代人力的服务机器人有着迫切的需要。 同时, 机电、 自动控制、

    2024年02月02日
    浏览(42)
  • 机器人、智能小车常用的TT电机/310电机/370电机选型对比

    在制作智能小车或小型玩具时,在电机选型上一些到各种模糊混淆的概念,以及各种错综复杂的电机参数,本文综合对比几种常用电机的参数及特性适应范围,以便快速选型,注意不同生产厂家的电机参数规则会有较大差异。 普通TT直流减速电机 310直流减速电机、370直流减速

    2024年02月04日
    浏览(41)
  • 单片机项目分享 单片机自动写字机器人设计与实现 - 物联网 嵌入式 stm32

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月21日
    浏览(71)
  • STM32智能小车项目

    实现的功能: a.小车运动:小车的前进,后退,左转,右转,停止。 b.蓝牙控制:手机通过蓝牙向开发板发送运动指令,驱动小车进行相应的运动。 c.自动循迹:小车通过红外探测灯来检测地面的反射光,控制方向,沿着轨迹行驶。 小车的配置:   蓝牙配置:   注意:蓝牙

    2024年02月11日
    浏览(23)
  • 【毕业设计】基于STM32的解魔方机器人

    1、方案设计 1.采用舵机作为魔方机器人的驱动电机,从舵机的驱动原理可知:舵机运行的速度和控制器的主频没有关系,所以采用单片机和采用更高主频的嵌入式处理器相比在控制效果上没有什么差别。单片机编程过程简单,非常容易上手,而且不需要进行操作系统的移植,

    2024年02月04日
    浏览(44)
  • stm32智能小车(FreeRTOS项目练习)

    看完了FreeRTOS的教程,想找个项目练手,淘宝或者网上少有基于FreeRTOS的项目,于是我就想用FreeRTOS做个智能小车,可能FreeRTOS不是做小车的最优解,但主要目的是用来练手。 文中的代码有自己写的也有引用别人的代码,基于寄存器的一些操作是自己对照手册写的,其他代码引

    2024年02月12日
    浏览(32)
  • STM32毕业设计——基于STM32+JAVA+Android的六足机器人控制系统设计与实现(毕业论文+程序源码)——六足机器人控制系统

    大家好,今天给大家介绍基于STM32+JAVA+Android的六足机器人控制系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦。需要下载开题报告PPT模板及论文答辩PPT模板等的小伙伴,可以进入我的博客主页查看左侧最下面栏目中的自助下载方法哦 文章目录: 本设计主

    2024年01月16日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包