您好,欢迎来到百家汽车网。
搜索
您的当前位置:首页STM32寄存器方式流水灯

STM32寄存器方式流水灯

来源:百家汽车网
GPIO寄存器

GPIOx->MODER   模式寄存器 32位
00:输入(复位状态)
01:通用输出模式
10:复用功能模式
11:模拟模式
GPIOD->OTYPER  端口输出类型寄存器 16位
0 :输出推挽(复位状态)
1:输出开漏
注:输出推挽的带负载能力强,输出开漏的吸收电流能力相对强,要得到高电平需要上拉电阻
GPIOD->OSPEEDR  端口输出速度寄存器 32位
00 : 2 MHz(低速)
01: 25 MHz(中速)
10: 50 MHz(快速)
11: 30 pF 时为 100 MHz(高速)( 15 pF 时为 80 MHz 输出
(最大速度))
GPIOD->PUPDR  端口上拉 /下拉寄存器 32位
00:无上拉或下拉
01:上拉
10:下拉
11:保留
GPIOD->ODR  端口输出数据寄存器 16位
GPIOD->IDR 端口输入数据寄存器 16位

使能GPIOx时钟

RCC->AHP1ENR   RCC AHB1 外设时钟使能寄存器 32位 一些位被保留
0:禁止
1:使能
注:此寄存器只能使能/禁止挂载在AHB1上的外设

主要代码
    RCC->AHB1ENR |=1<<(3*1);                                            //使能GPIOD时钟
    GPIOD->MODER &= 0;
    GPIOD->MODER |= ((1<<(2*12))|(1<<(2*13))|(1<<(2*14))|(1<<(2*15)));    //模式:输出
    GPIOD->OTYPER &= 0;
    GPIOD->OTYPER |=((0<<(13))|(0<<(13))|(0<<(14))|(0<<(15)));          //推挽输出 
    GPIOD->OSPEEDR &= 0;
    GPIOD->OSPEEDR |=((1<<(13*2))|(1<<(2*13))|(1<<(2*14))|(1<<(2*15))); //输出速度25M  不知道为什么不能写大于1的数如:2<<(13*2)
    GPIOD->PUPDR &= 0;
    GPIOD->PUPDR |= ((1<<(2*12))|(1<<(2*13))|(1<<(2*14))|(1<<(2*15)));  //上拉

记错 
RCC->AHB1ENR |=1<<(4*1); //错误,位移应从0数起
RCC->AHB1ENR |=1<<(3*1); //正确

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- baijiahaobaidu.com 版权所有 湘ICP备2023023988号-9

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务