完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
前言
相比于库函数,寄存器可能更难学一点,因为比较底层的知识,需要更扎实的功底,在之后的项目实验里面我都会用库函数,但是寄存器如果一点都不了解的话,之后出了Bug也很难解决,所以第一个实验—点亮LED灯,我也会用寄存器实现一次。 和库函数的准备工作一样,首先要先创建一个工程模板,然后添加led.h和led.c两个文件,具体步骤同于库函数的那篇博客,而不同的是led.c的程序是写的关于寄存器的程序。 GPIO知识回顾 因为我是看的正点原子的教程,所以参考的也是正点原子的几本资料,分别是STM32中文参考手册(主要是看寄存器配置)和STM32开发指南。 首先是GPIO的基础知识,由于我们要配置PE5和PB5两个端口,和寄存器一样要先对对PE5和PB5两个端口初始化再设置高低电平,从而实现LED灯的点亮与关闭,同理也应该用寄存器的方法使能时钟。 具体上面的寄存器,我也只能从字面上了解,通过视频了解,CRL是控制的0-7位,CRH配置的8-15位,我们配置的是低位,所以这里之后会用CRL来初始化端口而不是CRH。 根据STM32中文参考手册的端口配置低寄存器,在MODE和CNF0里面更改其数值就可以更改其输出模式和速度,一个红色的框代表一位。比如我们这里要设置推挽输出,速度为50MHZ,在这里就是0011,这个二进制转化为十进制就是3,等会我们就要将第五位(因为是PB5和PE5)设置为0011,就把其设置为了速度为50MHz的推挽输出模式。 用寄存器使能时钟 在库函数里面,我是通过调用了一个时钟使能函数实现的控制。而在寄存器里面就要通过更改寄存器内的二进制数据实现对STM32板的直接控制(个人理解)。 GPIO口都是的使能时钟都是通过RCC里面的APB2ENR控制的。根据STM32中文参考手册只需要把第六位和第三位的数据改为1即可使能时钟。 led.c函数 led.h这个库函数和之前的一样,无需更改,这里只需要重写LED_Init这个函数,用寄存器实现。 #include "led.h" //调用库函数 #include "stm32f10x.h" void LED_Init(void) { RCC->APB2ENR|=1<<3; //使能时钟,使第三位和第六位为1即可使能时钟,不改变其它位 RCC->APB2ENR|=1<<6; //这里用了C语言的或等于运算 //配置GPIOB.5 GPIOB->CRL&=0xFF0FFFFF; //用16进制先将第五位清零 即为0000 GPIOB->CRL|=0x00300000; //将第五位设置为0011 GPIOB->ODR|=1<<5; //将第五位设置为高电平 //配置GPIOE.5 GPIOE->CRL&=0xFF0FFFFF; GPIOE->CRL|=0x00300000; GPIOE->ODR|=1<<5; } 这里设置为高电平直接用的ODR寄存器,因为其只有一位,将其第五位更改为1即设置为了高电平。 main函数 main函数和库函数中的main函数大同小异,只不过由函数控制变成了寄存器控制,下面是main函数的代码。 #include "stm32f10x.h" #include "delay.h" #include "led.h" int main(void) { delay_init(); LED_Init(); while(1) { GPIOB->ODR|=1<<5; GPIOE->ODR|=1<<5; delay_ms(500); GPIOB->ODR=~(1<<5); GPIOE->ODR=~(1<<5); delay_ms(500); } } |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1567 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1513 浏览 1 评论
937 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
668 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1561 浏览 2 评论
1850浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
617浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
506浏览 3评论
511浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
492浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-11 17:15 , Processed in 0.714053 second(s), Total 76, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号