如何对变量进行对位置1与对位清0
在单片机开发或者驱动开发的过程中,需要对寄存器的某个位进行置1或者清0操作,且不影响其它位,那是如何进行实现的呢,先以某个变量为例子
上面看懂之后,以某个led开发为例子
led.h
#ifndef __LED_H
#define __LED_H
#include "stm32f4xx.h"
#define RCC_AHB1ENR *((volatile unsigned int *)(0x40023800+0x30)) //值强制类型转换为地址,地址解引用,可访问地址空间的值
#define GPIOF_MODER *((volatile unsigned int *)(0x40021400+0x00)) //值强制类型转换为地址,地址解引用,可访问地址空间的值
#define GPIOF_OTYPER *((volatile unsigned int *)(0x40021400+0x04)) //值强制类型转换为地址,地址解引用,可访问地址空间的值
#define GPIOF_OSPEEDR *((volatile unsigned int *)(0x40021400+0x08)) //值强制类型转换为地址,地址解引用,可访问地址空间的值
#define GPIOF_PUPDR *((volatile unsigned int *)(0x40021400+0x0C)) //值强制类型转换为地址,地址解引用,可访问地址空间的值
void Led_Init(void);
#endif
led.c
#include "led.h"
/******************************************
函数说明:LED0初始化
引脚说明:
LED0连接在PF9
PF9输出高电平,LED0灭;PF9输出低电平,LED0亮。
*******************************************/
void Led_Init(void)
{
//第五位置1,使能GPIOF组时钟
RCC_AHB1ENR |= (1<<5);
//设置为通用输出模式 19:18 = 0 1
GPIOF_MODER &= ~(1<<19);
GPIOF_MODER |= (1<<18);
//输出推挽 位9 = 0
GPIOF_OTYPER &= ~(1<<9);
//速度50MHZ 19:18 = 1:0
GPIOF_OSPEEDR |= (1<<19);
GPIOF_OSPEEDR &= ~(1<<18);
//设置为上拉 19:18 = 0 1
GPIOF_PUPDR &= ~(1<<19);
GPIOF_PUPDR |= (1<<18);
}
以上就是对位置1与对位清0在开发中的使用了。