STM32F103

提示:来源正点原子,参考STM32F103 战舰开发指南V1.3PDF资料

文章目录

  • 前言
  • 一、pandas是什么?
  • 二、使用步骤
    • 1.引入库
    • 2.读入数据
  • 总结


前言

提示:这里可以添加本文要记录的大概内容:

开发环境硬件普中科技,接线图在git仓库图片。

参考教程:野火霸道开发板

[野火®]STM32库开发实战指南——基于野火霸道开发板icon-default.png?t=N7T8https://doc.embedfire.com/mcu/stm32/f103badao/std/zh/latest/index.html

开发代码,在git仓库代码和开发板接线图icon-default.png?t=N7T8https://gitee.com/runruntiger/fireproject/tree/master/%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83/%E6%99%AE%E4%B8%AD%E7%A7%91%E6%8A%80%E5%BC%80%E5%8F%91%E6%9D%BF


提示:以下是本篇文章正文内容,下面案例可供参考

一、工具环境准备

1、git报错

TLS certificate verification has been disabled!

解决办法:CSDNicon-default.png?t=N7T8https://mp.csdn.net/mp_blog/creation/success/130977680

2、普中科技开发板接线图

接线图icon-default.png?t=N7T8https://gitee.com/runruntiger/fireproject/tree/master/%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83/%E6%99%AE%E4%B8%AD%E7%A7%91%E6%8A%80%E5%BC%80%E5%8F%91%E6%9D%BF

3、protues

Account
Component Search Engine: Free Symbols, footprints, & 3D models Protues123!

资源:proteus下载2023最新版-proteus电脑版v8.7-proteus官方正版免费下载-华军软件园

参考 :单片机仿真软件Proteus Pro 8.9版本License过期_proteus license失效了-CSDN博客

教程:Proteus快速入门(最详细教程)-CSDN博客

stm32LED灯:基于Proteus无实物STM32入门自学教程(一)--LED灯点亮闪烁_proteus stm32-CSDN博客

下载元器件库:Proteus添加新的元件库_proteus官网下载元件库-CSDN博客

二、开发

2.1.设计电路图

三、软件开发

1、led灯

2023年12月26日10:24:07

昨晚看了led灯相关的野火教程帖子。主要是看了led寄存器点亮led和led库函数版点亮led灯。其中,寄存器版只要使用了ODR和另一个gpio相关的寄存器。其中一个是设置gpio管脚速率,一个是设置电平。另外还有一个寄存器是开启gpio时钟的,教程中是这么说的,单片机上电的时候是默认关闭各个外设的时钟,为了降低功耗。所以在点亮led代码中需要开启对应管脚的时钟。

以上及时关于寄存器用到的三个寄存器的回顾。

在寄存器版本中还介绍了启动文件,即start_up文件。说start_up主要是汇编指令初始化整个单片机,然后最后调用两个主要的函数。一个是system_init函数,一个是_main。文中还着重说明了_main函数并不是指的c语言的main函数,而是从_main开始,就进入了配置c语言运行环境,进入c代码的环境。文中还着重说明了system_init函数,文中是简单处理了,将system_init函数写成空函数。不然不写system_init函数会报错。将system_Init函数写成空函数就不会出现编译器报错。但是这样系统时钟不是没有初始化了吗?文中也介绍了,如果不配置外部时钟,会调用单片机内部时钟HSI,HSI是8M的内部晶振。

以上就基本是寄存器版本的内容了。

不是的,其实还有一部分,就是设置GPIO引脚模式。分为输入和输出。包括上拉下拉输入、浮空输入、模拟输入。

输出包括开漏输出、推挽输出。介绍说推挽输出使用了两个MOS管,像led灯需要设置gpio高低电平的,设置成推挽输出。

像ADC采集的设置成模拟输入。

上面关于引脚模式的记忆不完成。寄存器相关的知识点基本就是以上几点了。

下面回顾一下关于库函数版本的内容。

文中说野火提供了stm32 3.5的固件库文件,可以将这些文件放到工程中。其他的就是调用库函数接口初始化gpio口。这边可以照着教程搞一遍。

现在感觉清晰了些,gpio后面应该就是关于系统时钟的介绍和配置。然后后面就是按键检测,及后面稍微复杂的adc、can等教程了。都需要在这个文章中整理一下。

写完这些,我又去看了下野火的教程,主要是看了goio口几种模式。这次看过后知道了一共有8种模式。分别为浮空输入、上拉输入、下拉输入、模拟输入。输出有开漏输出、推挽输出、复用开漏输出、复用开漏输入。

那么下面就写一下这几种模式的区别。有点要说的是上拉/下拉输入指的单片机内部的上拉/下拉电阻。里面还有一个TTL施密特器件。比如输入时,信号从管脚进来,第一个就是上拉/下拉电阻。然后进入施密特开关。经过施密特开关对信号的处理,存到寄存器中,然后处理器就能读到数据。

那么浮空输入就是上拉下拉都没有,信号直接进入施密特开关,再存储到寄存器中。所以浮空输入的信号在没有外部输入的时候电压值是不确定的。文章中说按键检测可以用浮空输入。

上拉下拉的话就是上拉一个电阻或者下拉一个电阻。

这边插入一个关于8种模式的电路图和解释的帖子:深刻理解GPIO(上拉输入、下拉输入、模拟输入、浮空输入,开漏输出,推挽输出的区别,以STM32为例)-CSDN博客

其中还涉及到上拉电阻接VDD和下拉电阻接VSS。对于VDD和VSS是什么我也是不知道的。百度一下 :一般来说VCC=模拟电源,VDD=数字电源,VSS=数字地,VEE=负电源。电路中VCC、VDD、VEE和VSS的区别!-电子发烧友网

所以VDD是设备接入电压,可能是5V吧。【实际百度了是3.3V:https://www.baidu.com/link?url=6RKErAJe3kN7-tPzwEpaLK2P8EgHUMdraM6YgpkGVrWjNGRQyDRxalSXLBnU4w-GFw4Tgnh7fp7h1YDtxIxERVjtXOehU22IFD1yj9Ni3yS&wd=&eqid=8d7bbe680031c55200000006658a7101STM32的工作电压(VDD)为2.0~3.6V】。VSS是地电压0V。所以上拉输入是接一个连接3.3V电压的电阻。下拉输入是连接一个连接0V的电阻。比如接上拉电阻。当没有输入的时候,输入时1,当管脚输入0V时,VDD通过电阻导通,施密特获取低电压。单片机读到0V。所以上拉和下拉可以使读取信号更稳定。

复用开漏和推挽和复用推挽的区别就在于当管教复用了就可以设置成复用模式。

刚才突然想到,浮空输入和上拉下拉输入是不可替代的。尤其对于按键检测,只能是浮空输入,不能是上拉下拉,不然只能检测到一个信号。又有了一点深入的理解。

过了好一会,突然发现还有没有陈述到位的知识点。比如startup文件的一小部分汇编语言。
回忆一下汇编语言是啥的:

mov b0 system_Init

BLX b0

mov b0 __main

BL b0

只能想起这么多啦

;Reset handler
Reset_Handler    PROC
                EXPORT  Reset_Handler     [WEAK]
    IMPORT  SystemInit
    IMPORT  __main

        LDR     R0, =SystemInit
        BLX     R0
        LDR     R0, =__main
        BX      R0
        ENDP

实际上还有

1、写一个注释 ;Reset handler

声明一个函数Reset handler。PORC是个伪指令,相当于声明一个函数Reset handler。

EXPORT说明Reset handler可以供外部使用

IMPORT说明systemInit和__main函数再其他文件中,需要去其他文件中找。
LDR表示将SystemInit函数地址加载到R0寄存器中

BLX表示跳转到R0执行程序,及执行SystemInit程序

ENDP表示程序结束。

其中[WEAK]表示弱连接,在其他地方定义了同名函数,就用其他地方定义的函数。

BLX和BL什么区别呢?

看了这个帖子:【ARM学习笔记】ARM汇编指令:B、BL、BX、BLX的区别_blx指令-CSDN博客

也没有看懂,后面可以看看汇编指令啦! 

这个帖子是反编译指令::C语言函数反汇编_c语言反汇编-CSDN博客

2023年12月27日09:31:41

昨晚又看了关于RCC系统的教程,RCC全程reset and clocl control,中文名为复位和时钟控制。

RCC主要控制系统时钟、PCLK1、PCLK2、HCLK、PLLCLK。他们的关系是PCLK1=HCLK=PLLCK=系统时钟=72M,PCLK2=1/2PCLK1=36M。

其中还涉及到一个时钟树的概念,还不是很了解。然后RCC这个教程主要是介绍了startup文件。介绍了中断向量表和汇编指令,野火好像还有一个汇编学习资料。然后startup启动文件中还介绍了堆栈的申请方式,用的是汇编指令。

2023年12月27日10:41:37

刚才又看了一下教程,发现我还忘了想起来HSE晶振的问题,晶振分内部晶振和外部晶振。内部晶振为HSI,HSI=8M。外部晶振为HSE,分为有源晶振和无源晶振。有源晶振只需要接OSE_IN引脚就行了。无源晶振需要接OSE_IN和OSE_OUT,并且需要接一个谐振。

另外野火这个教程还介绍了stm32各个时钟,昨晚没有看完,今天才发现。是个好教程。

对PLLCLK存在疑问,不知道这是什么时钟,这个帖子介绍了,不过我还没看完,记录一下:

单片机stm32之时钟树以及修改系统时钟频率(转) - 知乎


总结

未完待续... ...

你可能感兴趣的:(STM32,stm32,嵌入式硬件,单片机)