stm32F103C8T6通过写寄存器点亮LED灯
因为我写寄存器的操作不太熟练,所以最近腾出时间学习了一下怎么写寄存器,现在把我的经验贴出来,如有不足请指正
我使用的板子是stm32F103C8T6(也就是最常用的板子),现在要通过写GPIO的寄存器来实现点亮LED灯

查阅原理图可得,板子的PC13引脚外接了一个LED灯,也就是说我们接下来的操作是针对PC13这个引脚的
我们首先要找到GPIOC管脚的首地址(如下图所示)

所以我们GPIOC的地址是从0x40011000开始的
通过查阅手册,我们可以得知可以通过写BSRR寄存器来达到我们的目的,然后我们需要查找这个寄存器的地址

这里有个地址偏移量,也就是这个寄存器相对于起始地址的偏移量,所以BSRR寄存器的地址就是0x40011010
然后我们需要写对应的第13位(因为我们要操作的是PC13,第13号管脚),把第13位写成1,其他的保持0
根据换算可得,我们要写的是0x2000

这样就完成我们的点灯操作了
与之相对的,我们可以通过写右移16位丢弃所有1来全部置0
现在可以通过写寄存器来实现闪灯~
代码如下(超级简单的~)
1 unsigned int *PC13_BSRR = (unsigned int*)0x40011010; // 确定好BSRR的地址
2 *PC13_BSRR = (uint32_t)0x2000; // 向第13位写1,其余位不变
3 HAL_Delay(500); // 延时500ms
4 *PC13_BSRR = (uint32_t)0x2000 << 16u; // 移位操作,16u表示十进制的16,后面的u表示unsigned,这里是表示丢弃所有的1,全部换为0
5 HAL_Delay(500); // 延时500ms
当然方法不止一种,我们也可以通过写ODR寄存器来达到相同的效果
这两个寄存器操作大同小异,我就直接放代码了
这里也可以通过写0x0来全部置零
代码如下(一样简单的~)
1 unsigned int *PC13_ODR = (unsigned int*)0x4001100c; // 确定ODR的地址
2 *PC13_ODR = (uint32_t)0x2000; // 第13位写1,其余位保持0
3 HAL_Delay(500); // 延时500ms
4 *PC13_ODR = (uint32_t)0x0; // 全部置零
5 HAL_Delay(500); //延时500ms
这两种寄存器都可以用来点亮我们的小LED
stm32F103C8T6通过写寄存器点亮LED灯的更多相关文章
- 第7章 使用寄存器点亮LED灯
第7章 使用寄存器点亮LED灯 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fir ...
- 第7章 使用寄存器点亮LED灯—零死角玩转STM32-F429系列
第7章 使用寄存器点亮LED灯 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fir ...
- STM32F4 阿波罗寄存器点亮LED灯
学习步骤: 使用寄存器点亮LED灯,需要进行如下的步骤,LED灯属于外设部分,首先需要开启外设的时钟使能,然后LED灯是PB1口,(芯片是正点原子的阿波罗),接着定义GPIOB口的输出模式,为上拉.推 ...
- C语言版——点亮LED灯,深入到栈
在上一篇进行了汇编语言的编写之后,我们采用C语言来编写程序,毕竟C语言才是我们使用最多的语言. 仅仅是点亮LED灯显然太过于简单,我们需要分析最后的反汇编,了解函数调用栈,深入C语言骨髓去分析代码,并 ...
- 使用寄存器点亮LED——编程实战
stm32的编程和stc89c51还是存在着很多思想上的不同的,在51单片机中,我们点亮LED灯,只用给对应IO高低电平就可以了,而stm32中,就一个简单的GPIO,我们也需要配置好几个寄存器,而且 ...
- JZ2440开发板:用按键点亮LED灯(学习笔记)
本文是对韦东山嵌入式第一期学习的记录之一,如有您需要查找的信息,可以继续往下阅读. 想要用按键点亮LED灯,就需要知道按键和LED灯的相关信息,这样才可以进行之后的操作.阅读JZ2440的原理图,可以 ...
- 使用寄存器点亮LED(第2节)—寄存器映射代码讲解
// 打开 GPIOB 端口的时钟 *( unsigned int * )0x40021018|= ( 1 << 4 ); // 配置PC2 IO口为通用推挽输出,速度为10M *( un ...
- 初探RT-Thread系统在GD32E103x芯片上的使用,点亮LED灯
初探RT-Thread系统在GD32E103x芯片上的使用,点亮LED灯 前言 随着中美贸易战的加剧,很多公司越来越重视使用国产技术的重要性.使用国产技术,一方面可规避国外对技术的封锁造成产品核心 ...
- 第二章之S5PV210在BL1中点亮LED灯
1,u-boot中第一个入口在./arch/arm/cpu/armv7/start.S 翻到153行:如下图 前面都是进行一些基本设置,不用管. cpu_init_cp15设置协处理器, cpu_in ...
随机推荐
- B树、B+树、B*树三者的对比详解
转载至:https://www.2cto.com/database/201805/745822.html 对比 B+树是B树的变体,B*树又是B+树的变体,是一脉相承法治国拉的,不断解决新一阶段的问题 ...
- Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
Math类中提供了三个与取整有关的方法:ceil.floor.round,这些方法的作用与它们的英文名称的含义相对应,例如,ceil的英文意义是天花板,该方法就表示向上取整,所以,Math.ceil( ...
- SpringDataJdbc使用数据库默认值的解决方法
SpringDataJdbc提供了 @ReadOnlyProperty 注解,这会造成由Repository保存的实体会忽略这个字段的值进行保存,进而采用数据库的默认值操作:而查询时这个字段也是能够查 ...
- 我们可以在 hashcode() 中使用随机数字吗?
不行,因为对象的 hashcode 值必须是相同的.参见答案获取更多关于 Java 中 重写 hashCode() 方法的知识.
- RabbitMQ踩坑记
之前我们给我们的系统加了一个使用SpringAOP+RabbitMQ+WebSocket进行实时消息通知功能(https://www.cnblogs.com/little-sheep/p/993488 ...
- Netty + Spring + ZooKeeper搭建轻量级RPC框架
本文参考 本篇文章主要参考自OSCHINA上的一篇"轻量级分布式 RPC 框架",因为原文对代码的注释和讲解较少,所以我打算对这篇文章的部分关键代码做出一些详细的解释 在本篇文章中 ...
- Linux基础学习 | 目录及文件
一.目录结构 Linux目录采用树形结构,以根目录/向下延伸呈一个倒置的树的形状. 每个目录下都有其相对应的子目录,而子目录中又有其子目录的存在,就像一棵树的树枝分叉,所有的目录层次结构分明,每个目录 ...
- the compatibility problem of ie
ie8hack ie8下的兼容问题处理:背景透明,css3圆角,css3和jquery支持部分css3选择器(例如:nth-child),支持html5的语义化标签,媒体查询@media等. 在htm ...
- H5打造3d场景不完全攻略(一): H5 3d表现形式
前言 日前,taobao造物节H5放肆地火了一把.相信接下来将3d嵌入网站的这种营销方式会被越来越多的人留意到.工作之余体验了若干个3d H5页面,感觉这类的H5互动体验性明显要比普通的要强,把二维的 ...
- 《每周一点canvas动画》——圆周运动
接<每周一点canvas动画>--波形运动 圆周运动可以分为两种基本的形式:正圆运动和椭圆运动.在讲解圆周运动之前,必不可少的数学公式即将袭来.so,各位骚年们,请护好自己的膝盖.听不懂没 ...