stm32F103 入门篇 14-位带操作-GPIO输入输出

GPIO->ODR |= 0<<0;

P0 = 0XFE; // 总线操作
sbit LED1 = P0^0; //位操作
LED1 = 0;

位带简介:
在这里插入图片描述
外设位带区
1 AliasAddr= =0x42000000+ (A-0x40000000)84 +n4
SRAM 位带区
1 AliasAddr= =0x22000000+ (A-0x20000000)84 +n
4

“位带地址+位序号”转’换成别名区地址统一成一个宏。
#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x02000000+((addr & 0x00FFFFFF)<<5)+(bitnum<<2))

main.c

#include "stm32f10x.h"
#include "bsp_led.h"
#include "bsp_key.h"

#define GPIOA_ODR_Addr	(GPIOA_BASE+0X0C)
#define PAout(n) *(unsigned*)((GPIOA_ODR_Addr & 0xF0000000)+0x02000000+((GPIOA_ODR_Addr & 0x00FFFFFF)<<5)+(n<<2))
 
#define GPIOC_IDR_Addr	(GPIOC_BASE+0X08)
#define PCin(n) *(unsigned*)((GPIOC_IDR_Addr & 0xF0000000)+0x02000000+((GPIOC_IDR_Addr & 0x00FFFFFF)<<5)+(n<<2))


void Delay(uint32_t count)
{
		for(;count!=0; count--);
}

int main(void)
{
	//来到这个系统时钟被配置成72M
	LED_GPIO_Config();
	KEY_GPIO_Config();
#if 0	
		while(1)
	{
		//LED_R(OFF);
		//GPIO_SetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN);
		PAout(8) = 1;
		Delay(0xFFFFF);
		//GPIO_ResetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN);
		//LED_R(ON);
		PAout(8) = 0;
		Delay(0xFFFFF);
	}
	
#else 
	while(1)
	{
		if( PCin(8) == KEY_ON );
		{
			while(PCin(8) == KEY_ON);
			LED_G_TOGGLE;
		}
	}
	
#endif
	
} 


位带操作不会被中断,避免数据的丢失。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值