STM32的位操作和跑马灯实验

发布者:oplndctkl出最新更新时间:2017-11-09 来源: eefocus关键字:STM32  位操作  跑马灯 手机看文章 扫描二维码
随时随地手机看文章

     位操作代码在 sys.h 文件中,实现对 STM32 各个 IO 口的位操作,包括读入和输出。当然在这些函数调用之前,必须先进行 IO 口时钟的使能和 IO 口功能定义。

一。位带操作的原理

STM32的位操作和跑马灯实验

把一个位膨胀为一个32位的地址,如果要写这个位为1,只需要往这个地址写1.

二。哪些区域支持位带操作?

STM32的位操作和跑马灯实验
STM32的位操作和跑马灯实验
例如一个SRAM的区域

0x20000000上有32位,每一位都可以映射成一个地址,如果想往哪一位写1,只需要往这一位映射的地址写1.从而达到操作位的目的。

STM32的位操作和跑马灯实验

三。位带操作的优越性

STM32的位操作和跑马灯实验
不用位带操作的话,要把bit2置1,要先读取0x20000000的值,然后把bit2置1,然后再把寄存器的值写回0x20000000,如果用位带操作,已经知道bit2映射的地址是0x22000008, 直接往这个地址写1就可以了。

STM32的位操作和跑马灯实验

四。映射的关系

STM32的位操作和跑马灯实验

   某个寄存器或某个外设都会有一个基地址,首先要找到寄存器的地址,然后才能找到相关的位,然后通过公式计算就可以得到映射的地址。这里不必深究。

五。sys.h中对GPIO的输入输出部分实现了位带操作

STM32的位操作和跑马灯实验

GPIOA中ODR的地址为 GPIOA的基地址+ODR的偏移地址=GPIOA_BASE+0x0C
例如 PAout输出是操作ODR寄存器,PAout(1)就是经过一系列计算算出这一位映射的地址,对这个地址进行操作

PAin输入就是操作IDR寄存器。

六。实例操作

跑马灯实验

程序编写步骤:

STM32的位操作和跑马灯实验

STM32的位操作和跑马灯实验

LED0接PB5,LED1接PE5

led.c文件

//初始化PB5和PE5为输出口.并使能这两个口的时钟    

//LED IO初始化

void LED_Init(void)

{

 

 GPIO_InitTypeDef  GPIO_InitStructure;

 

 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE); //使能PB,PE端口时钟

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED0-->PB.5 端口配置

 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出

 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz

 GPIO_Init(GPIOB, &GPIO_InitStructure); //根据设定参数初始化GPIOB.5

 GPIO_SetBits(GPIOB,GPIO_Pin_5); //PB.5 输出高

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;     //LED1-->PE.5 端口配置, 推挽输出

 GPIO_Init(GPIOE, &GPIO_InitStructure);   //推挽输出 ,IO口速度为50MHz

 GPIO_SetBits(GPIOE,GPIO_Pin_5); //PE.5 输出高 

}

主函数

#include "stm32f10x.h"

#include "delay.h"

#include "led.h"

int main(void)

{

delay_init();

LED_Init();

while(1)

{

PBout(5) = 1; //采用位带操作PB.5引脚

PEout(5) = 1;

delay_ms(500);

PBout(5) = 0; //采用位带操作PB.5引脚

PEout(5) = 0;

delay_ms(500);

}

}


关键字:STM32  位操作  跑马灯 引用地址:STM32的位操作和跑马灯实验

上一篇:stm32 通用定时器与 PWM
下一篇:37.STM32ADC的基本原理

推荐阅读最新更新时间:2024-03-16 15:43

STM32串口中断应用实例
本文将介绍如何使用STM32F4的串口接收中断,通过串口助手模拟 上位机 发送指令、STM32F4串口中断接收到指令后根据指令选择开关LED小灯。 1.运用到的资源、工具: 1.1开发板 芯片 STM32F407,USART3串口 驱动电路 、 LED驱动 电路 1.2编译工具:MDK- ARM V5( keil 5) 1.3辅助工具:STM32CubeMX 2. 硬件 设计 2.1原理图 3.软件设计 3.1功能架构:串口调试助手向USART3发送1时,使LED1点亮; 发送0时,使LED1熄灭; 串口接收使用接收中断来提高程序运行时的效率、避免程序不断轮询查看串口是否接收到1或0的指令 3.2STM32cubeMX配
[单片机]
<font color='red'>STM32</font>串口中断应用实例
基于STM32单片机的电源设计
1. STM32 数据手册电源部分研读 RTC电源管脚为V BAT, 电源范围为1.8~3.6V,主要用于RTC时钟的供电, RTC在大部分场合用于保存一些重要的参数,比如在电脑主板上用于保存boss的信息, 如果这个电源丢了将导致无法重启,在单片机中低功耗设备常常也会使用这个RTC进行定时的唤醒功能,在普通的MCU中常用于做实时时钟。 VDD为数字电源,电源范围也是1.8~3.6V,在芯片内部集成了电压转化器,一般芯片内核供电为1.2V,图示的Regulator为转换器,将VDD电源稳压至1.2V。数据手册建议加入11个100nF和4.7uF的电容,不过实际应用中,只需要每个VDD加入一个100nF的去耦电容。 下图为模
[单片机]
基于<font color='red'>STM32</font>单片机的电源设计
STM32的ADC输入通道配置
STM32中最多有3个ADC模块,每个模块对应的通道不完全重叠。 下图是STM32F103CDE数据手册中的总框图的左下角,图中可以看出有8个外部ADC管脚分别接到了3个ADC模块,有8个外部ADC管脚只分别接到了2个ADC模块,还有5个外部ADC管脚只接到了ADC3模块,这样总共是21个通道。 下表是这些ADC管脚与每个ADC模块的对应关系,表中可以看出ADC1还有2个内部通道,分别接到内部的温度传感器和内部的参照电压:
[单片机]
<font color='red'>STM32</font>的ADC输入通道配置
stm32的systick(滴答定时器)实现精准延时
stm32具有systick定时器,该外设属于内核外设,时钟一般选择系统时钟的8分频。使能后,计数寄存器递减到0后,会自动重装值。 需要注意的是滴答定时器的计数器是24位的,最大值为2^24(16,777,216)。 (1)72MHz利用滴答定时器实现us级延时: 72MHz/8=9Mhz //最大值:1864135us void delay_us(u32 i) { u32 temp; SysTick- LOAD=9*i; //设置重装数值 SysTick- VAL=0; //清零计数器 SysTick- CTRL=0X01; //使能,减到零时无动作,采用外部时钟源(系统时钟的8分频
[单片机]
STM32单片机一个定时器输出不同频率PWM波
  在使用STM32单片机输出PWM波形的时候,通常可以直接使用定时器提供的PWM模式。可以通过自动重装载寄存器(TIMx_ARR)来设置定时器的输出频率,然后通过捕获/ 比较寄存器 1(TIMx_CCRx)来设置占空比。一个定时器只有一个自动重装载寄存器(TIMx_ARR),但是有4个通道的捕获/ 比较寄存器 1(TIMx_CCR1、TIMx_CCR2、TIMx_CCR3、TIMx_CCR4)。所以使用一个定时器输出PWM波形的时候,频率是统一调整的,4个通道的频率是相同的,但是占空比每个通道可以独立设置。比较寄存器TIMx_CCR1、TIMx_CCR2、TIMx_CCR3、TIMx_CCR4分别设置4个通道的占空比。   
[单片机]
<font color='red'>STM32</font>单片机一个定时器输出不同频率PWM波
STM32单片机看门狗:独立看门狗和窗口看门狗有什么区别
早期的MCU没有看门狗,就容易引起有些产品死机了不能重启工作。为了避免这个问题,后期的MCU在内部集成了看门狗的功能。 为了满足更多使用场景,现在很多MCU都集成了两个看门狗:独立看门狗与窗口看门狗。 拿现在大家熟悉的STM32来说,都集成了独立看门狗和窗口看门狗,下面就展开来讲讲这个两个看门狗以及它们的区别。 独立看门狗 独立看门狗,顾名思义,就是独立的一个看门狗,由其专用低速时钟 (LSI) 驱动,因此,即便在主时钟发生故障时仍然保持工作状态。 IWDG 最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合。 独立看门狗特性: 自由运行递减计数器 时钟由独立 RC
[单片机]
STM32单片机的八种IO口模式解析
STM32八种IO口模式区别 (1)GPIO_Mode_AIN模拟输入 (2)GPIO_Mode_IN_FLOATING浮空输入 (3)GPIO_Mode_IPD下拉输入 (4)GPIO_Mode_IPU上拉输入 (5)GPIO_Mode_Out_OD开漏输出 (6)GPIO_Mode_Out_PP推挽输出 (7)GPIO_Mode_AF_OD复用开漏输出 (8)GPIO_Mode_AF_PP复用推挽输出 以下是详细讲解 (1)GPIO_Mode_AIN模拟输入 即关闭施密特触发器,将电压信号传送到片上外设模块(不接上、下拉电阻) (2)GPIO_Mode_IN_FLOATING浮空输入 浮空输入状态下,IO的电平状态是不确定
[单片机]
stm32的八种GPIO配置模式
1. 模拟输入; 2. 浮空输入; 3. 上拉输入; 4. 下拉输入; 5. 开漏输出; 6. 推挽输出; 7. 复用开漏输出; 8. 复用推挽输出 具体的: 1.模拟输入 从上图我们可以看到,我觉得模拟输入最重要的一点就是,他不经过输入数据寄存器,所以我们无法通过读取输入数据寄存器来获取模拟输入的值,我觉得这一点也是很好理解的,因为输入数据寄存器中存放的不是0就是1,而模拟输入信号不符合这一要求,所以自然不能放进输入数据寄存器。该输入模式,使我们可以获得外部的模拟信号。 2.浮空输入 该输入状态,我的理解是,它的输入完全由外部决定,我觉得在数据通信中应该可以使用该模式。应为在数据通信中,我们直观的理解就是线路两端连接着发送端
[单片机]
<font color='red'>stm32</font>的八种GPIO配置模式
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved