【STM32】stm32通过地址操作寄存器

2023-05-16

stm32通过地址操作寄存器

  • 0x01 stm32数据类型所占字节数
  • 0x02 如何查看寄存器地址(基地址+偏移地址)
  • 0x03 操作寄存器地址控制LED闪烁(代码)
  • 0x04 通过定义结构体指针操作寄存器(代码)

0x01 stm32数据类型所占字节数

char = 1
short = 2
int = 4
long = 4
long long = 8
float = 4
double = 8
long double = 8
注意:1字节表示为16进制:0xFF

0x02 如何查看寄存器地址(基地址+偏移地址)

通过STM32中文参考手册查看相应寄存器,查看寄存器地址(基地址+偏移地址),然后分析寄存器每一位作用。
在这里插入图片描述
在这里插入图片描述

0x03 操作寄存器地址控制LED闪烁(代码)

#define RCC_APB2ENR (*(volatile unsigned int *)0x40021018)
#define GPIOA_CRL 	(*(volatile unsigned int *)0x40010800)
#define GPIOA_ODR 	(*(volatile unsigned int *)0x4001080C)

void Delay_ms(unsigned int t);

int main(void)
{
//	/*RCC基地址0x40021000 + RCC_APB2ENR偏移地址0x18*/
//	*(volatile unsigned int *)0x40021018 |= 1<<2;
//	
//	/*GPIOA基地址0x40010800 + GPIOA_CRL偏移地址0x00*/
//  *(volatile unsigned int *)0x40010800 &= 0xFFF0000F;
//  *(volatile unsigned int *)0x40010800 |= 0x00033330;	
	
	RCC_APB2ENR |= (1<<2);
 	GPIOA_CRL &= 0xFFF0000F;
	GPIOA_CRL |= 0x00033330;
	
	while(1)
	{
//		/*GPIOA基地址0x40010800 + GPIOA_ODR偏移地址0x80*/
//		*(volatile unsigned int *)0x4001080C |= (1<<1 | 1<<2 | 1<<3 | 1<<4);
//		Delay_ms(1000);
//		*(volatile unsigned int *)0x4001080C &= ~(1<<1 | 1<<2 | 1<<3 | 1<<4);
//		Delay_ms(1000);
		
		GPIOA_ODR |= (1<<1 | 1<<2 | 1<<3 | 1<<4);
		Delay_ms(1000);
		GPIOA_ODR &= ~(1<<1 | 1<<2 | 1<<3 | 1<<4);
		Delay_ms(1000);
	}
}

void Delay_ms(unsigned int t)
{
	unsigned int i;
	while(t--)
	{
		i=12000;
		while(i--);
	}
}

0x04 通过定义结构体指针操作寄存器(代码)

#include "main.h"

void Delay_ms(unsigned int t);

int main(void)
{
//	/*RCC基地址0x40021000 + RCC_APB2ENR偏移地址0x18*/
//	*(volatile unsigned int *)0x40021018 |= 1<<2;
//
//	/*GPIOA基地址0x40010800 + GPIOA_CRL偏移地址0x00*/
//  *(volatile unsigned int *)0x40010800 &= 0xFFF0000F;
//  *(volatile unsigned int *)0x40010800 |= 0x00033330;	
	
	RCC->APB2ENR |= 1<<2;
	GPIOA->CRL &= 0xFFF0000F;
	GPIOA->CRL |= 0x00033330;
	
	while(1)
	{
//		/*GPIOA基地址0x40010800 + GPIOA_ODR偏移地址0x80*/
//		*(volatile unsigned int *)0x4001080C |= (1<<1 | 1<<2 | 1<<3 | 1<<4);
//		Delay_ms(1000);
//		*(volatile unsigned int *)0x4001080C &= ~(1<<1 | 1<<2 | 1<<3 | 1<<4);
//		Delay_ms(1000);
		
		GPIOA->ODR |= (1<<1 | 1<<2 | 1<<3 | 1<<4);
		Delay_ms(1000);
		GPIOA->ODR &= ~(1<<1 | 1<<2 | 1<<3 | 1<<4);
		Delay_ms(1000);
	}
}

void Delay_ms(unsigned int t)
{
	unsigned int i;
	while(t--)
	{
		i=12000;
		while(i--);
	}
}
#ifndef __MAIN_H__
#define __MAIN_H__

typedef struct{
  unsigned int CR;
	unsigned int CFGR;
	unsigned int CIR;
	unsigned int APB2RSTR;
	unsigned int APB1RSTR;
	unsigned int AHBENR;
	unsigned int APB2ENR;
	unsigned int APB1ENR;
	unsigned int BDCR;
	unsigned int CSR;
	unsigned int AHBRSTR;
	unsigned int CFGR2; 
}RCC_Typedef;

typedef struct{
	unsigned int CRL;
	unsigned int CRH;
	unsigned int IDR;
	unsigned int ODR;
	unsigned int BSRR;
	unsigned int BRR;
	unsigned int LCKR;
}GPIOA_Typedef;

/*定义结构体指针,指向外设基地址*/
#define RCC ((RCC_Typedef *)0x40021000)
#define GPIOA ((GPIOA_Typedef *)0x40010800)

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

【STM32】stm32通过地址操作寄存器 的相关文章

  • STM32在Debug时程序运行时间不对,Debug时定时器中断每次进入断点时间不对,定时器一开启就进入中断的解决办法

    一 Debug时程序时间不对解决办法 1 点击魔术棒 2 点击Debug 点击Settings 3 点击Trace 在Core Clock里修改为你的系统时钟 二 Debug时定时器中断每次进入断点时间不对 在Debug时 程序停下来 定时
  • 如何在 Cortex-M3 (STM32) 上从 RAM 执行函数?

    我正在尝试从 Cortex M3 处理器 STM32 上的 RAM 执行函数 该函数会擦除并重写内部闪存 所以我肯定需要在 RAM 中 但我该怎么做呢 我尝试过的是 使用 memcpy 将函数复制到 RAM 中的字节数组 检查它是否正确对齐
  • 如何更改闪存的起始地址?

    我正在使用 STM32F746ZG 和 FreeRTOS Flash的起始地址是0x08000000 但我想把它改成0x08040000 我通过谷歌搜索了这个问题 但没有找到解决方案 我更改了链接器脚本 如下所示 MEMORY RAM xr
  • c项目makefile多重定义错误

    这个问题是一个对应于创建的repexthis问题 在我的嵌入式 C 项目中 我有两个独立的板 我想为每个板创建两个 c 文件 master c 和 Slave c 其中包含自己的特定main 功能 我使用 stm32cumbemx 生成带有
  • 以字符串形式接收数字(uart)

    我正在尝试通过 uart 接收一个包装为字符串的数字 我发送数字 1000 所以我得到 4 个字节 空字符 但是 当我使用 atoi 将数组转换为数字并将整数与 1000 进行比较时 我并不总是得到正确的数字 这是我用于接收号码的中断处理函
  • 在 MCU 内部 FLASH 中从一个固件跳转到另一个固件

    我目前正在开发针对 STM32F030C8 的引导加载程序固件应用程序 我在分散文件中指定引导加载程序应用程序将占用主内存位置 0x08000000 到 0x08002FFF 扇区 0 到扇区 2 我还编写了一个主固件应用程序 存储在0x0
  • 140-基于stm32单片机智能晾衣杆控制系统Proteus仿真+源程序

    资料编号 140 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DHT11传感器 ds1302时钟 光敏传感器 蜂鸣器 LED灯 制作一个基于stm32单片机智能晾衣杆控制系统Proteus仿真 2 通过光敏传感器
  • 135-基于stm32单片机超声波非接触式感应水龙头控制系统Proteus仿真+源程序

    资料编号 135 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DHT11传感器 电机 超声波传感器 制作一个基于stm32单片机超声波非接触式感应水龙头控制系统Proteus仿真 2 通过DHT11传感器检测当前
  • HAL库学习

    CMSIS简介 CMSIS Cortex Microcontroller Software Interface Standard 微控制器软件接口标准 由ARM和其合作的芯片厂商 ST NXP 软件工具厂商 KEIL IAR 共同制定的标准
  • [屏驱相关]【SWM166-SPI-Y1.28C1测评】+ 有点惊艳的开箱

    耳闻华芯微特许久了 看到论坛得评测活动赶紧上了末班车 毕竟对有屏幕得板子也是很喜欢得 京东快递小哥客客气气 微笑着把快递给了我 好评 直接拆了包 在此之前没看过视频号 所以这个圆盘盘得模具还是有点惊喜的 正面照如下 开机有灯光秀 还有动画
  • SHT10温湿度传感器——STM32驱动

    实验效果 硬件外观 接线 3 3V供电 IIC通讯 代码获取 查看下方 END
  • 硬件基础-电容

    电容 本质 电容两端电压不能激变 所以可以起到稳定电压作用 充放电 电容量的大小 想使电容容量大 使用介电常数高的介质 增大极板间的面积 减小极板间的距离 品牌 国外 村田 muRata 松下 PANASONIC 三星 SAMSUNG 太诱
  • 解决KEIL编译慢问题

    两种方案 使用v6版本的ARM Compiler 如果v6版本编译不过 必须使用v5版本的 则可以勾选掉Browse Information选项 提升很明显 1分多钟能优化到几秒 看代码量 但是这个有个弊端 在KEIL中会影响函数跳转 建议
  • CMSIS & STM32,如何开始? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想在 STM32 上使用 CMSIS 启动项目 网上一搜 没找到具体的教程 有些使用 SPL 开始项
  • for循环延时时间计算

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 之前做led点亮的实验 好像是被delay函数影响了 因为delay参数设置的不对
  • STM32H5 Nucleo-144 board开箱

    文章目录 开发板资料下载 目标 点亮LD1 绿 LD2 黄 和LD3 红 三个LED灯 开箱过程 博主使用的是STM32CubeMX配置生成代码 具体操作如下 打开STM32CubeMX File gt New project 选择开发板型
  • 核心耦合内存在 STM32F4xx 上可执行吗?

    尝试从 STM32F429s CCM 运行代码 但每当我命中 CCM 中的第一条指令时 我总是会遇到硬故障 并且 IBUSERR 标志被设置 该指令有效且一致 STM32F4xx 是否可能不允许从 CCM 执行 数据访问效果良好 alios
  • STM32 Nucleo 上的上升沿中断多次触发

    我正在使用 STM32 NUCLEO F401RE 微控制器板 我有一个扬声器 经过编程 当向上 向下推操纵杆时 可以按设定的量改变频率 我的问题是 有时 通常 当向上 向下推动操纵杆时 频率会增加 减少多次 这意味着 ISR 正在执行多次
  • 当端点和 PMA 地址均更改时,CubeMX 生成的 USB HID 设备发送错误数据

    我正在调试我正在创建的复合设备的问题 并在新生成的仅 CubeMX 代码中重新创建了该问题 以使其更容易解决 我添加了少量代码main 让我发送 USB HID 鼠标点击 并在按下蓝色按钮时使 LED 闪烁 uint8 t click re
  • STM32 传输结束时,循环 DMA 外设到存储器的行为如何?

    我想问一下 在以下情况下 STM32 中的 DMA SPI rx 会如何表现 我有一个指定的 例如 96 字节数组 名为 A 用于存储从 SPI 接收到的数据 我打开循环 SPI DMA 它对每个字节进行操作 配置为 96 字节 是否有可能

随机推荐

  • 如何在Ubuntu上安装Apache Http服务器

    有两种方法可以在Ubuntu上安装Apache Http服务器 xff1a 使用apt命令自动安装 配置和构建源代码 xff0c 然后手动安装 1 自动安装 1 使用 apt cache search 命令搜索Apache软件包 apt c
  • Ubuntu18.04安装ROS系统

    1 Ubuntu与ROS的版本对应 Ubuntu ROS1 016 04LTSKinetic LTS18 04LTSMelodic LTS20 04LTSNoetic LTS 2 安装 本文为Ubuntu18 04版本下的安装 2 1准备工
  • 从Unity导出Obj格式的地形(Terrian)

    1 在Unity中创建C 脚本 using UnityEngine using System Collections using UnityEditor using System IO using UnityEngine SceneMana
  • Unity导出工作台(Console)数据

    首先在Unity中添加C 脚本 xff1a using System Collections using System Collections Generic using UnityEngine using UnityEditor usin
  • 2022研究生数学建模B题思路

    子问题1 xff1a 排样优化问题 要求建立混合整数规划模型 xff0c 在满足生产订单需求和相关约束条件下 xff0c 尽可能减少板材用量 约束 1 在相同栈 stack xff09 里的产品项 item xff09 的宽度 xff08
  • 找到并标记Mesh顶点

    1 在Unity 3D中新建一个物体 本文以Cube为例 2 创建一个C 脚本 命名为MeshTest 3 在脚本中写入程序 在打开的脚本 MeshTest 上编写代码 xff0c 首先获取 MeshFilter 组件 xff0c 然后获取
  • win11 命令 wmic:无效的指令 解决办法

    我想你肯定看到过让你修改环境变量的方法 但是 xff0c 如果你的电脑就根本没有装wmic xff0c 再怎么修改环境变量也是徒劳 我们打开设置 xff1a Win 43 I 点击应用 选择 可选功能 添加可选功能 搜索wmic xff0c
  • 【STM32】GPIO_InitTypeDef GPIO_InitStructure;语句的理解

    这句话声明一个结构体 xff0c 名字是GPIO InitStructure xff0c 结构体原型由GPIO InitTypeDef 确定 xff0c 在stm32中用来初始化GPIO 设置完GPIO InitStructure里面的内容
  • 如何在VScode上运行C语言

    如何在VS code上运行C语言 安装VS code 下载MinGW w64 xff1b 查验是否成功 我在VS code上尝试运行C语言后 xff0c 想和大家分享一下经验 安装VS code 下载MinGW w64 xff1b 查验是否
  • Node.js 如何实现OCR文字识别

    Node js 如何实现OCR文字识别 OCR Optical Character Recognition 是指用光学技术识别文字图像的技术 随着全新的技术出现 xff0c OCR 技术已经发展成为一种非常先进的技术 xff0c 可以从图片
  • Jetson nano烧录与简介

    Jetson nano 烧录教程 文章目录 Jetson nano 烧录教程 Jetson nano 简介1 Jetson Nano 接口介绍2 盒内包含3 不包含的物品 xff08 额外购入 xff09 4 Jetson nano的三种供
  • 51单片机-定时器(简易时钟的实现)

    文章目录 前言一 定时器的功能以及定时器的结构定时器的功能定时器的结构 二 定时器的控制工作模式寄存器TMOD控制寄存器TCON写代码来初始化定时器 三 定时器引发中断简易时钟主程序main c延时函数Delay c控制LCD162模块LC
  • 用于评估婴儿认知发展的IMU内嵌式玩具

    0 5岁是神经发育的敏感时期 xff0c 对身心健康至关重要的EF xff08 执行功能 Executive functions xff09 会在这个时期出现 在现代临床和研究实践中 xff0c 编码员通过手动标记视频中婴儿在使用玩具或社交
  • yolo+ocr集装箱字符识别(pytorch版本)

    前言 这个是我们 的大创项目 当我们拿到一份数据集 xff0c 首先就是要对整个项目有个较为清晰的认识 xff0c 整体的思路是什么 xff0c 难点在哪 xff0c 怎么部署和实现 1 整体的思路 xff1a 先通过目标检测网络 xff0
  • ROS话题通信实现发布接收以及vscode编译配置(五)C++版本

    在ROS中每一个功能点都是一个单独的进程 xff0c 每一个进程都是独立运行的 ROS是进程 xff08 也称为Nodes xff09 的分布式框架 因为这些进程甚至还可分布于不同主机 xff0c 不同主机协同工作 xff0c 从而分散计算
  • CMakeList

    目录 1 简介 2 常用命令 2 1 指定 cmake 的最小版本 2 2 设置项目名称 2 3 设置编译类型 2 4 指定编译包含的源文件 2 4 1 明确指定包含哪些源文件 2 4 2 搜索所有的 cpp 文件 2 4 3自定义搜索规则
  • 多旋翼飞行器设计与控制(二)—— 基本组成

    多旋翼飞行器设计与控制 xff08 二 xff09 基本组成 一 机架 1 机身 指标参数 xff1a 重量 xff1a 尽可能轻轴距 xff1a 外圈电机组成圆的直径材料 xff1a 冲碳纤维就完了布局 xff1a 2 起落架 作用 xf
  • 多旋翼飞行器设计与控制(六)—— 动态模型和参数测量

    多旋翼飞行器设计与控制 xff08 六 xff09 动态模型和参数测量 一 多旋翼控制模型 刚体运动学模型 跟质量与受力无关 xff0c 只研究位置 速度 姿态 角速度等参量 xff0c 常以质点为模型 刚体动力学模型 它与一般刚体动力学模
  • 多旋翼飞行器设计与控制(七)—— 传感器标定和测量模型

    多旋翼飞行器设计与控制 xff08 七 xff09 传感器标定和测量模型 一 三轴加速度计 三轴加速度计是一种惯性传感器 xff0c 能够测量物体的比力 xff0c 即去掉重力后的整体加速度或者单位质量上作用的非引力 当加速度计保持静止时
  • 【STM32】stm32通过地址操作寄存器

    stm32通过地址操作寄存器 0x01 stm32数据类型所占字节数0x02 如何查看寄存器地址 xff08 基地址 43 偏移地址 xff09 0x03 操作寄存器地址控制LED闪烁 xff08 代码 xff09 0x04 通过定义结构体