stm32寄存器点灯代码(stm32点亮小灯)

您所在的位置:网站首页 stm32点亮小灯步骤 stm32寄存器点灯代码(stm32点亮小灯)

stm32寄存器点灯代码(stm32点亮小灯)

2023-05-30 12:21| 来源: 网络整理| 查看: 265

stm32寄存器点灯代码(stm32点亮小灯)

stm32寄存器点灯代码(stm32点亮小灯)

stm32单片机 怎么直接操作寄存器

楼主你这样真的很为难人,以stm32的跑马灯为例

#include "led.h"//头文件自己写

#include "stm32f4xx.h"//直接操作寄存器必备的头文件

void LED_Init(void)

{

 RCC->AHB1ENR|= 1

//PF9为LED所接引脚

 GPIOF->MODER &= ~(3

 GPIOF->MODER |= 1

 GPIOF->OSPEEDR &= ~(3

 GPIOF->OSPEEDR |= 2

 GPIOF->PUPDR &= ~(3

 GPIOF->PUPDR |=1

GPIOF->OTYPER &= ~(1

GPIOF->OTYPER |=0

GPIOF->ODR|= 1

//GPIOF->ODR&=~(1

//PF10类比于PF9

GPIOF->MODER &= ~(3

 GPIOF->MODER |= 1

 GPIOF->OSPEEDR &= ~(3

 GPIOF->OSPEEDR |= 2

 GPIOF->PUPDR &= ~(3

 GPIOF->PUPDR |=1

GPIOF->OTYPER &= ~(1

GPIOF->OTYPER |=0

GPIOF->ODR|= 1

}

stm32流水灯怎样重置

1首先我们都要初始化LED的配置void LEDInit(){

GPIO_InitTypeDef GPIO_InitStructure; SystemInit(); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC , ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ; GPIO_Init(GPIOC, &GPIO_InitStructure); } 12345678910111213141234567891011121314现在第一种方法gpio寄存器实现等的亮灭2.GPIO寄存器void LEDdisplay(){ u32 i,j; //BSRR是一个32位数据寄存器,这里要初始化实所有灯灭 GPIOC->BSRR=0xff; for(i=0;i while (1) { for(j=0;j //把ODR寄存器里面都存入零,让所有灯亮一次 GPIOC->ODR=0x00;

for(j=0;j //这里让所有灯灭掉 GPIOC->ODR=0xFF; for(j=0;j //这里是把第五个串口的Pin_5放进寄存器,让这个灯发光 GPIOC->ODR ^= GPIO_Pin_5; }}1234567891011121314151617181920212212345678910111213141516171819202122在这个基础上可以进行修改首先这个是延迟0.6s大约for(i=0;iwhile (1) { for(i=0;i { for(j=0;j //从0到7,没有设置BRR则BRR是默认亮灯,这是是循坏把灯调亮 GPIOC->BRR=(1 //从0到7,设置BSRR为灭灯,这是是循坏把灯i的灯熄灭 for(j=0;j GPIOC->BSRR=(1 } for(i=0;i { for(j=0;j //统一让所有串口灯亮起来 GPIOC->BRR=0x000000ff; //统一让所有串口灯亮起来 for(j=0;j //设置BSRR寄存器 GPIOC->BSRR=0x000000ff;

} 12345678910111213141516171819202122231234567891011121314151617181920212223第二种方法,函数法, u32 i; //把每个串口都设置成高电平,后面可以进行ResetBits直接可以把等亮起来 GPIO_SetBits(GPIOC, GPIO_Pin_All); GPIO_ResetBits(GPIOC, GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_6); for(i=0;i while(1) { for(i=0;i //写入GPIO接口,写入的灯会亮 GPIO_Write(GPIOC, 0xfe); for(i=0;i GPIO_Write(GPIOC, 0xfd);

for(i=0;i GPIO_Write(GPIOC, 0xfb); for(i=0;i GPIO_Write(GPIOC, 0xf7);

for(i=0;i GPIO_Write(GPIOC, 0xef); 123456789101112131415161718192021

stm32开发板怎么用按键控制流水灯

开发板上4个LED是接到STM32的4个IO口上的,要点亮LED,只要在这4个IO上输出对应的高电平那如何让STM32在PF6~PF9这4个IO上输出高点平呢首先要看下《STM32F10xxx参考手册CD00171190.pdf》里关于IO端口的介绍,第8章 通用和复用功能I/O(GPIO和AFIO)百为STM3210E-EVAL开发板上的CPU是STM32F103ZET6,有GPIOA~GPIOG七组IO,每组IO有16个引脚GPIO_Pin_0~GPIO_Pin_15,如板上的PF0~PF15其中每个IO端口有2个32位的寄存器(GPIOx_CRL和GPIOx_CRH)配置,每个引脚由其中4位进行配置,4位字段是由一个两位的配置字段和一个两位的模式字段组成要设置这4位,要看下GPIOx_CRL,GPIOx_CRH的寄存器定义由上图可以看出GPIOF_CRL的31~28位是设置PF7的,GPIOF_CRL的27~24位是设置PF6的GPIOF_CRH的3~0位是设置PF8的,GPIOF_CRH的7~4位是设置PF6的这里我们把每个引脚设置为 CNF[1:0] = 00:通用推挽输出模式MODE[1:0] = 11 : 输出模式,最大速度50MHGPIOF_CRL,GPIOF_CRH的寄存器地址分别是0x40011C00,0x40011C04这个寄存器是怎么得来的,STM32数据手册里并没有直接给出,在《一个内幕者对STM32的介绍》4.1.1 寄存器地址查阅 这里有介绍怎么通过上面的偏移地址算出。配置好,我们就可以直接在端口输出数据寄存器GPIOF_ODR输出高电平控制LED了,GPIOF_ODR有16位,每个位对应GPF的一个引脚,PF0~PF15下面就可以编写LED流水灯程序了,激动啊,等了好久终于等到今天/* main.c */#define GPIOF_CRL (*(volatile unsigned int *)0x40011C00) //端口配置低寄存器#define GPIOF_CRH (*(volatile unsigned int *)0x40011C04) //端口配置高寄存器#define GPIOF_ODR (*(volatile unsigned int *)0x40011C0C) //端口输出数据寄存器#define RCC_APB2ENR (*(volatile unsigned int *)0x40021018) //void delay(void){ unsigned int i; for(i=0;i}int main(){ int i; RCC_APB2ENR |= 1 GPIOF_CRL = ( GPIOF_CRL & 0x00ffffff ) | 0x33000000; //配置PF6,PF7为通用推挽输出模式,最大速度50MH GPIOF_CRH = ( GPIOF_CRH & 0xffffff00 ) | 0x00000033; //配置PF8,PF9为通用推挽输出模式,最大速度50MH while(1) { for(i=6;i { GPIOF_ODR = ( GPIOF_ODR & 0xfffffc3f ) | ( 1 delay(); } }}

STM32单片机入门 寄存器版 跑马灯不亮

//delay_ms(300); //GPIOB->ODR &= ~(1 //GPIOE->ODR &= ~(1 //delay_ms(300);看看led能否被点亮,如果不能,就是你的初始化配置有问题,可找原子的不完全手册。如果能点亮,delay_ms(300);延时不够,加大一点,比如3000,30000追问

不对,我的是mini开发板。

以上就是小编对于stm32寄存器点灯代码(stm32点亮小灯)问题和相关问题的解答了,stm32寄存器点灯代码(stm32点亮小灯)的问题希望对你有用!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3