搜索
ST MCU Finder
安装免费手机应用,
寻找理想的ST MCU

[应用相关] 2-STM32带你入坑系列(点亮一个灯--Keil)

[复制链接]
178|34
 楼主 | 2020-8-14 16:11 | 显示全部楼层 |阅读模式
1-STM32带你入坑系列(STM32介绍)


首先是安装软件


409815f36474ce636d.png


这一节用Kei来实现,需要安装MDK4.7这个软件,怎么安装,自己百度哈.都学习32的人了,不会连个软件都不会安装吧....还是那句话
没有百度一下解决不了的事情,如果有那就是百度两下(除了科研和探索人类未知领域)



作者:杨奉武
链接:https://www.jianshu.com/p/6abb24a8dcb3
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

使用特权

评论回复
 楼主 | 2020-8-14 16:13 | 显示全部楼层
建个文件夹
23095f36478fa3038.png
106335f364796edfaa.png
141185f36479e449c9.png
608985f3647a59b8f6.png

使用特权

评论回复
 楼主 | 2020-8-14 16:14 | 显示全部楼层
我用的是STM32F103C8t6  大家根据自己的选择
301195f3647ba37ae9.png
178135f3647c2c45fb.png

使用特权

评论回复
 楼主 | 2020-8-14 16:14 | 显示全部楼层
建一个主函数的 .c文件
901005f3647dc688ff.png
997275f3647e4efdcc.png
258575f3647ebac855.png
756185f3647f44590a.png

使用特权

评论回复
 楼主 | 2020-8-14 16:15 | 显示全部楼层
编译一下

381325f364806e54a5.png
332225f36480e201a5.png

使用特权

评论回复
 楼主 | 2020-8-14 16:15 | 显示全部楼层
启动文件里面有个执行 SystemInit函数的调用,因为咱没有这个函数,所以报错了,其实寄存器开发用不到,实际上这是官方提供的库开发的时候需要的

可以看一下官方提供的库开发里面SystemInit实现的什么功能

281785f36483233db6.png
745215f36483af2251.png

使用特权

评论回复
 楼主 | 2020-8-14 16:16 | 显示全部楼层
主要的是配置了一开始的时钟,因为是初学者,所以先不用管哈,以后咱也会去配置外设时钟,,不对,这一节就会去配置时钟

咱就写一个这个函数,然后内部什么都不写

566525f36485b3321d.png
402245f364865caa6b.png

使用特权

评论回复
 楼主 | 2020-8-14 16:17 | 显示全部楼层
还有个警告,实说最后的代码要多加一个空行
931095f3648768f670.png

使用特权

评论回复
 楼主 | 2020-8-14 16:17 | 显示全部楼层
我也不知道为什么有这个规则
414805f3648999706d.png

使用特权

评论回复
 楼主 | 2020-8-14 16:18 | 显示全部楼层
我的开发板有个灯是PC13  
29485f3648be4a8a9.png
咱就让PC13输出高电平,然后控制灯亮
564855f3648cd5c90f.png

使用特权

评论回复
 楼主 | 2020-8-14 16:18 | 显示全部楼层
然后咱就找控制PC13的寄存器,看看往寄存器里面写几然后控制PC13输出高电平
349205f3648ddf21ed.png
130445f3648e487baa.png

使用特权

评论回复
 楼主 | 2020-8-14 16:19 | 显示全部楼层
首先需要明确一件事情哈

每个IO都有  CRL,CRH,IDR,ODR,BSRR,BRR,LCKR 这些寄存器,而这些寄存器都是32位的,占四个字节,(大家可以看图哈),

800435f36490625df5.png

使用特权

评论回复
 楼主 | 2020-8-14 16:20 | 显示全部楼层
假设咱的单片机哈有PA口和PB口

然后假设PA的地址是  0x40010800  PB的地址是 0x40010C00 实际上内部的寄存器呢,是这样的

553295f364924c7490.png

使用特权

评论回复
 楼主 | 2020-8-14 16:21 | 显示全部楼层
然后再说一下引脚的模式

738645f364948dc18e.png

模拟输入:该引脚就会连接内部的模拟输入模块(使用ADC或者DAC的时候需要设置)

浮空输入模式:引脚状态完全由外部决定(一般串口的RX引脚设置成这种模式)

上拉/下拉:就是内部实现上下拉

通用推挽输出:就是直接输出高低电平,推挽输出还有个速率问题

379275f3649676a7fd.png

这样理解:假设SPI传输的速率是9M的,假设我设置了引脚的输出最大是2M,引脚的反转速度根本跟不上哈,所以会传输不正常,所以可以设置输出速率为10M

当然速率越高,功耗越大

通用开漏输出:和51单片机的P0口似的,没有输出能力,需要外部接上拉电阻才可以(可以用来做通信时候的电压匹配,因为咱的32是3,3V供电,假设和5V的芯片通信,咱可以设置为这个模式,然后上拉一个电阻,然后电阻另一边接的是5V)

使用特权

评论回复
 楼主 | 2020-8-14 16:21 | 显示全部楼层
后面还有复用功能推挽/开漏输出:其实哈所谓复用,就是指引脚的第二功能,就是除了正常的输入输出的其它功能,列如:

PA2还有个功能是串口2的输出,如果要用这个功能,就需要配置PA2为:复用推挽输出

891135f3649903bd85.png

使用特权

评论回复
 楼主 | 2020-8-14 16:22 | 显示全部楼层
好啦好啦,请清空自己的脑子,这些东西哈,等用到了再说.... 记住哈,用到什么学什么,知识的海洋永远没有尽头的,千万别像学校里面似的先统统学学学,最后来个考试,  咱是学一个知识点,用一个知识点,然后再学一个知识点,再用一个知识点.......

使用特权

评论回复
 楼主 | 2020-8-14 16:22 | 显示全部楼层
现在假设配置 PA0 输出 高电平  输出速率咱选择 50M   注意:设置输出高电平,那么IO口就是一直是高电平,和输出速率没有关系,唯一的关系就是速率越高响应的越快

举个栗子:

假设哈:  速率是1HZ   那么执行输出高电平操作可能会延时 1S后才执行,然后一直输出高电平

假设用这个速率执行9M  SPI通信肯定是不行的,因为这个速率根本跟不上哈.....

834525f3649d885eba.png

使用特权

评论回复
 楼主 | 2020-8-14 16:23 | 显示全部楼层
配置端口0为推挽输出 50M  

那么这个寄存器的值   0x4444 444 3   前面的4444444是用的默认的值, 后面的3就是配置0端口  (0011)

00的意思

955275f3649f38bef5.png

11的意思

105075f364a125be29.png

使用特权

评论回复
 楼主 | 2020-8-14 16:24 | 显示全部楼层
看一下PA口的地址

321485f364a2313ea7.png

起始地址是0x4001 0800

275865f364a3215291.png

偏移是00h就是说,要配置PA口的CRL这个寄存器,(配置端口0为推挽输出 50M)直接

往0x4001 0800这个地址写入  0x4444 444 3  就可以了

使用特权

评论回复
 楼主 | 2020-8-14 16:25 | 显示全部楼层
有没有这样想的

0x40010800 = 0x44444443

431235f364a585e357.png

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

在线客服 快速回复 返回顶部 返回列表