实现PF8亮灯 操作寄存器点亮LED灯
内容纲要

1.先查看原理图,找到想要实现亮灯的引脚。此处PC 代表GPIOC ; PF 代表 GPIOF 。约定俗成,包括RA RB 都代表GPIOA GPIOB等等等等。。。

file

根据需要打开的引脚,找到GPIOF 的寄存器映射地址,通过控制地址保存的参数来实现对GPIO的电平控制

file

  • 由于需要控制GPIO口,所以我们应该查找芯片 datasheet 的 GPIO 的 ODR (端口输出寄存器)部分,

Reset value:0x0000 0000 代表默认值,当时钟使能时,端口会使 0x0000 0000 ,

file

此图片拿ODR6 来做例子,因为控制的红色的灯是PF6

    //1.先修改GPIOI的对应的寄存器为高电平。
    *(unsigned int *)(0x40021400 + 0x14) |= (1<<6);

    //2.将GPIOI设置为想要的电平。
    *(unsigned int *)(0x40021400 + 0x14)  &= ~(1<<6);

2.设置该GPIO 的端口模式寄存器使能。

file

file

//GPIO的寄存器模式需要打开
    *(unsigned int *)(0x40021400 + 0x00) &=  ~(0x03 << 2*6);
    *(unsigned int *)(0x40021400 + 0x00) |=  (1<<2*6);

上方代码位偏移为 6 是因为以PF6 为例,GPIO为GPIOF 位偏移为6

RCC时钟控制。

file

file

//时钟设置。RCC
        *(unsigned int *)(0x40023800 + 0x30) |= (1<<5);

//////////////////////////////////////////////////////////练习代码//////////////////////////////////////////////

//leg_reg.h
//reg.c的头文件,用来存放寄存器的地址

#define GPIO_AHB1 *(unsigned int *)(0x40023800 +0x30)
#define GPIOC_MODE *(unsigned int *)(0x40020800)
#define GPIO_ODR3 *(unsigned int*)(0x40020800 + 0x3)
//leg_reg.c

#include "led_reg.h"

int main(){
    //点亮蓝色的灯  PC3

#if 1
//2.需要开启AHB1的时钟
GPIO_AHB1 |=  (1<<2);

//1.需要使能GPIOC的端口模式           这里注意:我在这里踩过坑了。
    GPIOC_MODE |=  (0x03<<2*3);
    GPIOC_MODE &= ~ (2<<2*3);
//3.GPIOC_ODR3
//将需要设置的寄存器地址通过 按位或 置为1,方便后面用 按位与 进行设置为想要的。
    GPIO_ODR3 |= (1<<3);

    while(1)
    {
    //设置为要放置的值
        GPIO_ODR3 |= (1<<3);
        Delay(0x0fffff);
        GPIO_ODR3 &=~ (1<<3);
        Delay(0x0fffff);
    }
}

void SystemInit(){
/* 重写汇编语言文件中的SystemInit 初始化函数 */
    //不过函数体不用写
}
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇