2-STM32带你入坑系列(点亮一个灯--Keil)

1-STM32带你入坑系列(STM32介绍)


首先是安装软件

这一节用Kei来实现,需要安装MDK4.7这个软件,怎么安装,自己百度哈.都学习32的人了,不会连个软件都不会安装吧....还是那句话

没有百度一下解决不了的事情,如果有那就是百度两下(除了科研和探索人类未知领域)


建个文件夹






我用的是STM32F103C8t6  大家根据自己的选择

 建一个主函数的 .c文件







 编译一下


启动文件里面有个执行 SystemInit函数的调用,因为咱没有这个函数,所以报错了,其实寄存器开发用不到,实际上这是官方提供的库开发的时候需要的

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


主要的是配置了一开始的时钟,因为是初学者,所以先不用管哈,以后咱也会去配置外设时钟,,不对,这一节就会去配置时钟

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



 还有个警告,实说最后的代码要多加一个空行

我也不知道为什么有这个规则


我的开发板有个灯是PC13  


咱就让PC13输出高电平,然后控制灯亮


然后咱就找控制PC13的寄存器,看看往寄存器里面写几然后控制PC13输出高电平





首先需要明确一件事情哈

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


假设咱的单片机哈有PA口和PB口

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

然后再说一下引脚的模式


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

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

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

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

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

当然速率越高,功耗越大

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


后面还有复用功能推挽/开漏输出:其实哈所谓复用,就是指引脚的第二功能,就是除了正常的输入输出的其它功能,列如:

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

好啦好啦,请清空自己的脑子,这些东西哈,等用到了再说.... 记住哈,用到什么学什么,知识的海洋永远没有尽头的,千万别像学校里面似的先统统学学学,最后来个考试,  咱是学一个知识点,用一个知识点,然后再学一个知识点,再用一个知识点.......


现在假设配置 PA0 输出 高电平  输出速率咱选择 50M   注意:设置输出高电平,那么IO口就是一直是高电平,和输出速率没有关系,唯一的关系就是速率越高响应的越快

举个栗子:

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

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



 配置端口0为推挽输出 50M  


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


00的意思




 11的意思


看一下PA口的地址


起始地址是0x4001 0800



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

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


 有没有这样想的

0x40010800 = 0x44444443


要告诉编译器0x40010800是一个地址才好,然后我要往这个地址里面写东西

(int *)0x40010800  这样就能告诉编译器0x40010800是一个地址

然后读取这个地址里面的值   aa =  *((int *)0x40010800)  

给这个地址赋值   *((int *)0x40010800)  = XXXXX

所以 就是 *((int *)0x40010800)  = 0x44444443;



这个只是配置了PA0的模式,咱还要让他输出高电平(配置了引脚,那个该引脚应该会有变化)  仿真下











 控制0端口输出高电平就是让ODR寄存器的值是    0x0000 0001

 因为这个寄存器说有个偏移是0c   其实,额,还记得这张图不


 说白了就是前面的地址被其它寄存器占了而已,注意这里所说的偏移,都是在0x40010800的基础上需要增加多少才能到那个寄存器

所以要配置PA口 的ODR寄存器   就是需要在原来地址的基础上加上 0x0C

所以控制PA0输出高电平就是

*((int*)(0x40010800+0x0c))  = 0x0000 0001



咱先下载到开发板试一试


会发现......不可以,,,哈哈哈哈    肯定还有没有配置的地方


需要打开时钟,有人就会想,这么麻烦呀......

嘿嘿,想一个场景,现在很多项目都需要低功耗,STM32呢之所以这些地方需要自己选择性的打开,就是为了低功耗

您想想哈,不打开,不用它,肯定省电

好了,咱就去打开时钟去

感觉到繁琐了没,注意这样寄存器开发哈,以后用库函数就方便的多,很多都封装好了,直接调用就可以

我个人感觉要想学好一个东西,其实最重要的是过程,我要让大家知道一切的一切都是怎么来的,为什么ST的官方要弄库函数,库函数是怎么写的.很少人会讲的这么深,总结起来有几个原因(嫌麻烦,懒的具体研究;怕讲不好,反倒让别人不喜欢自己的教程).

我呢从来不嫌麻烦,而且知识储备和自学能力还可以,所以呢....额,我也不知道该说什么,反正还是那句话:我说讲的东西不会让大家感觉到难,只是会感觉繁琐而已

现在市面上倒卖鱼的太多了,真正教给捕鱼的少之又少,我所希望的是前期自己捕鱼自己吃,后期从卖鱼的那里直接买鱼吃.等到哪一天卖鱼的不再了,你不是还可以自己捕鱼.当然你学会了捕鱼,当然也可以卖鱼,我现在就开始卖鱼了,也卖捕鱼的方法

扯了这么多.........


就是往这个寄存器里面的这个位写1就可以了

然后就是找地址





 所以RCC_APB2ENR这个寄存器的地址是

0x4002 1000  + 0x18


*((int*)(0x40021000+0x18))  = 0x00000004    

这个4    0100




 下载进去试一试


好了好了咱修改修改,去点亮小灯   PC13


首先是打开时钟   


所以是  *((int*)(0x40021000+0x18)) = 0x00000010; 




配置为输出50M



 说一下哈 CRL是配置0-7引脚号   CRH是配置8-15引脚号   所以选择CRH


 *((int *)(0x40011000 + 0x04)) = 0x44344444;  默认的咱就默认是4



配置输出高电平


 *((int *)(0x40011000 + 0x0C)) = 0x00002000;



 下载进去



 现在熄灭



 好了这一节就说到这里,自己去消化消化

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,056评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,842评论 2 378
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,938评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,296评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,292评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,413评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,824评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,493评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,686评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,502评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,553评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,281评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,820评论 3 305
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,873评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,109评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,699评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,257评论 2 341

推荐阅读更多精彩内容