首页 > 其他分享 >点亮一个LED灯-寄存器版

点亮一个LED灯-寄存器版

时间:2023-09-10 17:47:43浏览次数:60  
标签:输出 LED 点亮 unsigned 地址 寄存器 GPIO CRL

目录

一. 流程简述

1.打开MDK5新建一个工程并保存, 选择芯片具体型号(F103C8).
2.添加启动文件, 创建main文件, 放在工程根目录即可.

3.编写代码通过控制寄存器点亮LED灯

二. 查看参考手册

1.需要控制LED的亮灭就需要控制GPIO输出高低电平. 所以需要找到对应GPIO的寄存器, 对其写入0或1进行控制, 描述GPIO的寄存器在参考手册第八章.
2.本次实验使用到的寄存器有: CRL(低位控制寄存器), ODR(输出寄存器).

3.在CRL和ODR中写入对应的值, 配置好GPIO的输出模式以及输出值.
4.要想在寄存器中写入/修改值, 就需要拿到寄存器的地址. 以上只能得到基于GPIO的偏移地址. 还需要在第二章存储器和总线架构中查看GPIO的基地址.

5.这里以GPIOB端口0位例分析, 根据GPIOB基地址40010c00, 以及CRL偏移地址0x00. 可以得到CRL准确地址为: 40010c00.

/*
  1. 这里首先0x40010c00在编译器看来只是一个立即数, 需要使用(unsigned int *) 将其强转为无符号整形指针类型.
  2. 最前面的*表示拿到0x40010c00这个地址上的值, 默认是0x4444 4444(复位值).
  3. 将0x4444 4444 | 0x01 (这种方式可以将自己想要的位置置1而且不影响其他位). 这里的含义是选择了开漏输出模式.
*/
*(unsigned int *)0x40010C00 |= ((1) << (4*0));

6.操作ODR寄存器将GPIOB0端口输出1, ODR寄存器偏移地址为: 0x0C. 得到准确地址为40010C0C.

/*
  将第0位写0, GPIOB0将会输出低电平0.
*/
*(unsigned int *)0x40010C0C &= ~(1 << 0);

7.和51不同的是, 由于GPIO是属于外设挂载在APB2总线上, stm32外设使用前都需要使能, 所以需要去操作APB2时钟使能外设在第六章

8.RCC_APB2ENR是APB2时钟使能寄存器, 其偏移地址为0x18, 基地址是AHB(复位和RCC时钟控制): 0x40021000. 得到准确地址为: 0x400210018.

/*
  将第3位置1, 即IOPBEN:IO端口B时钟使能 (I/O port B clock enable)
*/
*(unsigned int *)0x40021018 |= ((1) << 3);

标签:输出,LED,点亮,unsigned,地址,寄存器,GPIO,CRL
From: https://www.cnblogs.com/Deng-S/p/17691546.html

相关文章

  • 用OLED屏幕播放视频(2): 为OLED屏幕开发I2C驱动
    下面的系列文章记录了如何使用一块linux开发扳和一块OLED屏幕实现视频的播放:项目介绍为OLED屏幕开发I2C驱动使用cuda编程加速视频处理这是此系列文章的第2篇,主要总结和记录一个I2C从设备的驱动,在linux内核中如何实现,如何给用户态的程序暴露合适的接口,让用户态有机......
  • 系统入门C语言的寄存器
    你好,我是悦创。本篇为C语言一对一辅导笔记节选,我们来系统地了解C语言中与寄存器相关的内容。1.什么是寄存器?寄存器是位于CPU内部的小型、高速的存储单元,它们的访问速度远高于主内存。在执行程序时,常用的数据和指令经常被加载到这些寄存器中,以加速程序的运行。2.register关键字在......
  • AI绘画:StableDiffusion实操教程-诛仙-碧瑶(附高清图下载)
    前段时间我分享了StableDiffusion的非常完整的教程:“AI绘画:StableDiffusion终极宝典:从入门到精通”不久前,我与大家分享了StableDiffusion的全面教程:“AI绘画:StableDiffusion终极宝典:从入门到精通”。然而,仍有些读者提出,虽然他们已经成功地安装了此工具,但生成的作品与我展示......
  • AI绘画:StableDiffusion实操教程-斗破苍穹-云韵-常服(附高清图下载)
    前段时间我分享了StableDiffusion的非常完整的教程:“AI绘画:StableDiffusion终极宝典:从入门到精通”不久前,我与大家分享了StableDiffusion的全面教程:“AI绘画:StableDiffusion终极宝典:从入门到精通”。然而,仍有些读者提出,虽然他们已经成功地安装了此工具,但生成的作品与我展示......
  • @Scheduled的cron表达式
    @Scheduled生效条件启动类加上注解@EnableScheduling定时任务的类加上注解@Component或@Service等定时任务的方法加上注解@Scheduledcron表达式┌─────────────second(0-59)│┌─────────────minute(0-59)││┌────────......
  • FAILED: SemanticException Unable to determine if hdfs://localhost.localdomain:90
    问题描述在hive数据库里面,使用select语句对表的数据进行查找,就出现了这个错误:问题解决这怎么说呢?就是说,本来想先放一放,之后再解决,在解决了namenode的问题之后,再次打开hive,执行select语句,发现莫名其妙地好了;本人也很是莫名其妙;......
  • 关于 Commerce 启动时遇到的错误消息 failed to initialize connector HTTP 9001
    使用命令行install.bat-rcx-for-spastart启动commerce实例时,遇到下列错误消息:SEVERE:Failedtoinitializeconnector[ConnectorHTTP/1.1-9001]这个错误并不影响最后的Commerce正常运行:SEVERE:Failedtoinitializeconnector[ConnectorHTTP/1.1-9001]Spri......
  • 用OLED屏幕播放视频(3): 使用cuda编程加速视频处理
    下面的系列文章记录了如何使用一块linux开发扳和一块OLED屏幕实现视频的播放:项目介绍为OLED屏幕开发I2C驱动使用cuda编程加速视频处理这是此系列文章的第3篇,主要总结和记录了如何使用cuda编程释放GPU的算力.在此之前尝试过使用python调用opencv直接处理视频数据,但使用......
  • 21 Linux 自带的LED驱动
    一、Linux自带LED驱动使能  其实Linux内核自带LED抢夺那个,但在此之前需要配置Linux驱动来使能LED驱动。  输入以下命令:cdlinux/atk-mpl/linux/my_linux/linux-5.4.31makemenuconfig  根据以下路径找到LED驱动:→DeviceDrivers→LEDSupport(NE......
  • qt程序调用cuda-11.7,cmake编译时,提示:"CMakeCUDACompilerId.cu" failed. Compiler:
    报错显示:Running/home/wc/software/cmake-3.26.3-linux-x86_64/bin/cmake/home/wc/work/junke_src/missile-sim'-GCodeBlocks-UnixMakefiles'in/home/wc/work/junke_src/build/debug.CMakeErrorat/home/wc/software/cmake-3.26.3-linux-x86_64/share/cmak......