跑马灯-------寄存器版本

--------------拿到一个工程模板,首先要编译,编译成功之后再删除main()内容,这样编译不会出错。-----------------
**

程序步骤

**
在这里插入图片描述
配置时钟使能寄存器
在这里插入图片描述
RCC AHB1ENR寄存器 用来时钟使能,然后 跑马灯IO口是PF9,PF10 ,GPIOF在RCC AHB1ENR 中是第五位, 给它写入1,其他位保持不变,所以要进行 “或运算”
RCC->AHB1ENR|= 1<<5;//把这个寄存器的第五位设置为1

配置PF9
MODER寄存器
在这里插入图片描述
F0是 0,1位 F1是2,3位,,,所以 F9 是18,19位, 给该位写入 01输出模式
a,首先要把这两位清零,在与01进行“或运算” (ps 不清零要写入01有些麻烦)
b,清零:比如把 11 10 10 11 -------->11 10 01 11,,,要把第二位(最右边为最低位) 10 清零 需要
11 10 10 11 & 11 11 00 11 (这里有个技巧,可以这样想 将与上的这个数变为
00 00 11 00 再取反)11 10 10 11 & (~(00 00 11 00))
而00 00 11 00 可以写成( 3<<2)因为11是3, 原来是这个数00 00 00 11,将11左移两位,就变成了 00 00 11 00.
c, 清零后 就变成了 11 10 00 11,再进行或运算给第二位 写入 01 ,把1<<2.


OSPEEDR寄存器
在这里插入图片描述
PUPDR
在这里插入图片描述
在这里插入图片描述
OTYPER寄存器
每一位配置一个IO,0 推挽 0<<9(推挽 可以输出 01电平,开漏只能输出0电平)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
ODR寄存器给高电平 写入1(或运算),给低电平写入0(与运算)
GPIOF->ODR|= 1<<9;//1 高电平
GPIOF->ODR&=~(1<<9);//0 低电平

	//PF9
	 GPIOF->MODER &= ~(3<<2*9);//设置第九个IO口,每一个IO操作两个位,3是11,清零
	 GPIOF->MODER |= 1<<(2*9);//1是01  ,写入01 输出模式
		
	 GPIOF->OSPEEDR &= ~(3<<2*9);
	 GPIOF->OSPEEDR |= 2<<(2*9);  //写入 10  配置50MHz
		
	 GPIOF->PUPDR &= ~(3<<2*9);
	 GPIOF->PUPDR |=1<<(2*9);//上拉
		
	 GPIOF->OTYPER &= ~(1<<9);
	 GPIOF->OTYPER |=0<<9;//推挽
		
     GPIOF->ODR|= 1<<9;//1   高电平

	//PF10-
	
	 GPIOF->MODER &= ~(3<<2*10);
	 GPIOF->MODER |= 1<<(2*10);
		
	 GPIOF->OSPEEDR &= ~(3<<2*10);
	 GPIOF->OSPEEDR |= 2<<(2*10);
		
	 GPIOF->PUPDR &= ~(3<<2*10);
	 GPIOF->PUPDR |=1<<(2*10);
		
	GPIOF->OTYPER &= ~(1<<10);
	GPIOF->OTYPER |=0<<10;
		
	GPIOF->ODR|= 1<<10;

#include "stm32f4xx.h"

#include "led.h"

#include "delay.h"


int main(void)
{

delay_init(168);
LED_Init();
	
	while(1){
	GPIOF->ODR&=~(1<<9);
	GPIOF->ODR&=~(1<<10);
	delay_ms(500);
		
		GPIOF->ODR |= 1<<9;
		GPIOF->ODR |=1<<10;
		delay_ms(500);
	
	}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值