13-寄存器编写程序入门

2023-05-16

与51单片机对比,32单片机控制寄存器要复杂的多;在51单片机中,可以直接控制端口的高低电平;然而32单片机却不可以,因为32为了减小功耗,默认情况下这些时钟都是关闭的,需要打开才能使用;同时它的使用模式也有多种;只用在配置好端口之后才能进行控制。

1:下面以stm32单片机为例:初步学习通过寄存器控制GPIO的方法:

#include  "stm32f4xx.h"
int main ()
{
	//有很多外设,默认情况下这些外设时钟都是关闭的
	//降低功耗,有专门的外设控制,复位时钟控制
	//AHB1外设复位

	//第一步:打开GPIOF5的时钟
	*(unsigned int *)(0x40023800+0x30)|=(1<<5);


	//第二步:控制GPIO口的方向----GPIOF配置为输出
*(unsigned int *)(0x40021400+0x00)&=~((0x03)<<(2*9));	
*(unsigned int *)(0x40021400+0x00)|=(1<<(2*9));	
	
	
	//第三步:控制GPIO的数据输出寄存器----PF9输出高电平
     *(unsigned int *)(0x40021400+0x14)|=(1<<9);	
	//PF9输出低电平
	*(unsigned int *)(0x40021400+0x14)&=~(1<<9);
}
void SystemInit(void)
{
		//骗过编译器不报错
}

2:下面通过库函数控制GPIOF9输出

		//第一步:打开GPIOF的时钟(之所以是左移5位,是因为ABCEDF,中的F排在5)
RCC_AHB1ENR|=(1<<5);
	//第二步:控制GPIO口的方向----GPIOF配置为输出
GPIOF_MODER &=~((0x03)<<(2*9));	
GPIOF_MODER |=(1<<(2*9));		
	
	//第三步:控制GPIO的数据输出寄存器----PF9输出高电平
GPIOF_ODR |=(1<<9);

	//PF9输出低电平
GPIOF_ODR &=~(1<<9);

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

13-寄存器编写程序入门 的相关文章

  • ucosiii-常用api

    uC OS III 提供了许多 API 函数 xff0c 可以根据需要选择使用 以下是一些常用的 uC OS III API 函数 xff1a 任务管理 API OSTaskCreate xff1a 创建一个新任务 xff1b OSTask
  • windows 清除 .git 文件夹

    有时我们需要将 git 管理项目中的 git文件夹删除 xff0c 但是如果项目太多 xff0c 一个一个手动删除太麻烦 xff0c 这时候可以用 bat 批处理文件删除 xff0c 具体操作如下 桌面 右击 新建文本文档 xff0c 此时
  • Your anti-virus program might be impacting your build performance.解决方案

    Your anti virus program might be impacting your build performance 解决方案 在使用 AndroidStudio 时 xff0c 经常会弹出框提示 xff1a Your ant
  • init.rc 启动 shell 脚本 开机执行脚本 init.rc执行shell脚本

    Android 重启时执行 shell 脚本 init rc 执行 shell 脚本 最近有个需求 xff0c 需要生成系统的默认配置 xff0c 使得在系统开机后 xff0c 直接读取已经配置好的文件 当时想的解决方案是 xff0c 在编
  • android 10 自定义系统服务接口给app调用

    Android 安卓自定义系统服务 最近有个需求 xff0c 要增加系统服务 xff0c 生成第三方 jar 包提供给第三方应用调用 xff0c 而且 jar 包必须用特定的包名 xff0c 最后生成的 jar 包不能包含 framewor
  • Android java.lang.NoSuchMethodError: No virtual method ;or its super classes (declaration of

    修改 AOSP 源码后调用错误 java lang NoSuchMethodError No virtual method in class or its super classes declaration of appears in sy
  • 谷歌使用技巧 20 招

    第一招 xff1a 使用搜索栏下方的 Tab 栏 xff0c 可以快速搜索 视频 图片 新闻第二招 xff1a 使用引号 xff0c 默认搜索会去搜索包含输入关键字的结果 xff0c 用 34 holy shit 34 会去进行整句搜索第三
  • 索引算法原理解析(B-tree以及磁盘存储原理)

    刚开始学习的时候 xff0c 百度去查 xff0c 但发现好多说得太复杂不好理解 xff0c 结合各个文章总结一下 xff08 建议大概看文字 xff0c 不理解不要紧 xff0c 然后再看图的执行步骤然后在结合文字 xff0c 这样一切就
  • C语言-----结构体内存对齐

    结构体内存对齐规则 xff1a 第一个成员在结构体变量偏移量为0 的地址处 其他成员变量要对齐到某个数字 xff08 对齐数 xff09 的整数倍的地址处 对齐数 61 编译器默认的一个对齐数与该成员大小中的较小值 vs中默认值是8 Lin
  • dpi计算 density 取值范围

    PPI DPI计算公式 Density 61 sqrt span class token punctuation span span class token punctuation span span class token car wp
  • Repo 流程

    First repo init creates the repo directory clones the git repository https android googlesource com tools repo to repo r
  • *** buffer overflow detected ***: terminatedAborted (core dumped)解决

    在执行一个程序的时候出现了下面的这个错误 xff0c 明明在Ubuntu下面已经编译好了 xff0c 执行的时候除了问题 xff0c 于是换了台电脑尝试还是一样 buffer overflow detected terminated Abo
  • 虚拟机Ubuntu远程启动Jetson nano RVIZ图形界面失败

    INFO 1644470251 178517 Rosapi started map manager 6 process has finished cleanly log file home jetson ros log fb3115c6 8
  • YOLOv5训练自己的数据集实现视频的识别

    写在前面 我本来是使用这个模型进行手写签名的定位 xff0c 但是因为比赛的主办方原因 xff0c 数据不允许公开 xff0c 所以我使用动物世界的一段开头视屏来制作我的数据集 这整个模型跑通的过程中 xff0c 我参考了很多不错的博客 x
  • stm32---OLED(SSD1306)

    OLED模块优缺点 优点 xff1a 尺寸小 xff0c 分辨率高 xff0c 低压3 3V就可工作 xff0c 支持多种接口方式 xff0c 该模块提供了总共4种接口包括 xff1a 6800 8080两种并行接口方式 4线的穿行SPI接
  • stm32---ADC模数转换

    ADC xff1a 模数转换器 xff0c 将模拟信号 xff08 0v xff0c 3v xff0c 6v等 xff09 转换为表示一定比例电压值的数字信号 xff08 1 xff0c 2 xff0c 3等 xff09 STM32F10x
  • stm32---DMA

    DMA 全称Direct Memory Access xff08 直接存储器访问 xff09 xff0c 把一个地址空间的值 复制 到另一个地址空间 xff0c 使用DMA传输方式无需CPU直接控制传输 xff0c 通过硬件为RAM和IO设
  • STM32通信---CAN

    一 CAN是什么 xff1f CAN xff0c 全称为 Controller Area Network xff0c 即控制器局域网 xff0c 是一种多主方式的串行通讯总线 xff0c 是国际上应用最广泛的现场总线之一 二 CAN的起源
  • 计算机网络学习笔记3-抓包工具的使用

    Wireshark win64 2 6 2的使用 安装一路next 在发送数据之前 运行抓包工具 当数据发送之后 记得停止抓包
  • linux运行java项目的shell脚本

    bin bash WORKDIR 61 home xiaohong Baowen cd WORKDIR WEB INF classes for file in 96 ls WORKDIR WEB INF lib jar 96 do CLAS

随机推荐

  • 基于STM32F103的智能门禁系统

    0 前言 本人大二软工菜鸟一枚 xff0c 大神不喜勿喷 1 功能演示 点这里功能演示 2 硬件选型 序号名称备注1STM32F103C8T6开发板用于主控2AS608指纹模块指纹解锁3RFID RC522射频模块刷卡解锁40 96寸四针O
  • uboot的环境变量相关源码分析

    一 uboot的环境变量基础 1 1 环境变量的作用 1 让我们可以不用修改uboot的源代码 xff0c 而是通过修改环境变量就可以影响uboot运行时的一些特性 譬如说修改bootdelay环境变量就可以更改系统开机自动启动时倒计时的秒
  • uboot移植Linux-SD驱动代码解析

    一 uboot与linux驱动 1 1 uboot本身是裸机程序 1 狭义的驱动概念是指 xff1a 操作系统中用来具体操控硬件的代码叫驱动 广义的驱动概念是指 xff1a 凡是操控硬件的代码都叫驱动 2 裸机程序中是直接使用寄存器的物理地
  • 移植三星官方的uboot到x210

    1 移植前的准备工作 1 1 三星移植过的uboot源代码准备 1 三星对于S5PV210的官方开发板为SMDKV210 xff0c 对应移植的 uboot smdkv210 tar bz2 1 2 SourceInsight准备 1 移植
  • 4g模块与51单片机通信

    本文硬件选自忆佰特的4g模块和老陈的上官一号 第一步先使用电脑配置4g模块 xff0c 配置好后再与51单片机进行接线完成通信 xff0c 需要提前插入SIM卡 xff0c 接线如下 通电后模块右下角会亮起红灯 xff0c 并且右上角四颗l
  • 用51单片机IIC协议OLED显示汉字

    接线如下 xff1a IIC协议 xff1a xff08 IIC全称Inter Integrated Circuit 集成电路总线 xff09 由PHILIPS公司在80年代开发的两线式串行总线 xff0c 用于连接微控制器及其外围设备 I
  • Linux中的open()、write()与read()函数,超详细

    open xff08 xff09 函数 xff1a int open const char pathname int flags mode t mode 使用open函数需要的头文件 xff1a include lt sys types h
  • C语言结构体对齐,超详细,超易懂

    结构体对齐规则 结构体的第一个成员总是存放在结构体变量开辟的空间的起始地址其它成员变量要存储在一个名叫对齐数的整数倍的地址结构体总大小为最大对齐数的整数倍 xff0c 结构体内每一个变量都会产生一个对齐数 xff0c 取其最大的对齐数如果是
  • 51单片机之串口通信、WiFi模块、蓝牙模块、4G模块

    目录 串口通信 全双工通信 xff08 打电话 xff09 TTL电平 UART 字节帧 串口相关的寄存器 串口的工作模式 蓝牙模块HC 08 HC 08的AT指令 编辑 WiFi模块ESP8266 配置WiFi模块作为客户端连入当前局域网
  • STM32单片机之温湿度检测系统(DTH11、OLED、LCD1602)

    LCD1602 LCD1602引脚 第 1 脚 VSS 为电源地 第 2 脚 VDD 接 5V 正电源 第 3 脚 VL 为液晶显示器对比度调整端 接正电源时对比度最弱 xff0c 接地时对比度最高 xff0c 对比度过高时会产生 鬼影 x
  • C_records

    1 include inlcude lt file h gt include file h lt gt 从编译器指定目录查找 从当前目录查找 xff0c 未发现再从指定目录查找 2 enum enum TYPE A B C 注意内部 xff
  • STM32之智能小车,手把手从0到1,模块化编程

    小车介绍 本博文将会从0到1实现一个智能小车 xff0c 该小车实现功能 xff1a 1 摇头避障模式 2 跟随模式 3 循迹模式 4 小车测速并显示在OLED屏幕 5 语音控制小车等等 硬件组成 STM32F103开发板 小车套件 L91
  • STM32之增量式编码器电机测速

    STM32之增量式编码器电机测速 编码器编码器种类按监测原理分类光电编码器霍尔编码器 按输出信号分类增量式编码器绝对式编码器 编码器参数分辨率精度最大响应频率信号输出形式 编码器倍频 STM32的编码器模式编码器模式编码器的计数方向仅在TI
  • STM32之MPU6050获取欧拉角

    STM32之MPU6050获取欧拉角 MPU6050MPU6050特点MPU6050电路图以及框图MPU6050框图MPU6050电路图 MPU6050相关寄存器电源管理寄存器1 xff08 0x6B xff09 陀螺仪配置寄存器 xff0
  • Postman(接口测试工具)

    目录 一 基本介绍 1 Postman 是什么 2 Postman 快速入门 2 1快速入门需求说明 二 Postman 完成 Controller 层测试 需要的代码 xff1a Java类 request jsp success jsp
  • QT网络编程TCP/UDP开发流程 制作网络调试助手

    目录标题 一 开发基础知识1 QT的网络编程 TCP和UDP2 网络编程接口1 listen2 connect 二 TCP编程1 TCP服务端实现流程2 TCP客户端实现流程 三 UDP编程四 源码1 TCP服务端2 TCP客户端3 UDP
  • Vscode 运行C++文件无法显示输出

    一 情况是 xff1a 运行简单的HelloWodld cpp程序能在终端显示结果 xff0c 如下 xff1a include lt iostream gt using namespace std int main cout lt lt
  • Jetson nx或其他aarch64 使用anaconda虚拟环境构建GPU版本的Pytorch cuda可用的前提下完整教程

    一 Anaconda 下载安装包 首先 xff0c 到anaconda官网下载安装包 xff0c 注意不是下载平常linux系统所用的安装包 xff0c 而是下载ARM架构的安装包 xff0c 若使用其他的版本会提示版本不符合无法安装 安装
  • 11-C语言对寄存器的封装

    1 xff1a 仅通过指针进行封装 xff1a 编译可能出错 xff0c 这个地方只是表示思路 在基地址基础上加上偏移地址 define GPIOF BASE 0x40021400 define GPIOF BASE 0x40021400
  • 13-寄存器编写程序入门

    与51单片机对比 xff0c 32单片机控制寄存器要复杂的多 xff1b 在51单片机中 xff0c 可以直接控制端口的高低电平 xff1b 然而32单片机却不可以 xff0c 因为32为了减小功耗 xff0c 默认情况下这些时钟都是关闭的