首页 > 其他分享 >GPIO与跑马灯实验

GPIO与跑马灯实验

时间:2023-03-04 19:22:42浏览次数:31  
标签:LED void delay 跑马灯 Init 实验 GPIO include

STM32学习之GPIO

实战:跑马灯

库函数操作

步骤

  1. 使能IO口时钟。调用RCC_APB2PeriphClockCmd();
  2. 初始化IO口模式,调用GPIO_Init();
  3. 操作IO口,输出高低电平。
    GPIO_SetBits();GPIO_ResetBits();

代码

main.c

#include "stm32f10x.h"
#include "sys.h"
#include "delay.h"
#include "led.h"

int main(void)
{
    LED_Init();
    delay_init();
    
    while(1)
    {
        GPIO_ResetBits(GPIOA,GPIO_Pin_8);
        GPIO_SetBits(GPIOD,GPIO_Pin_2);
        delay_ms(1000);
        GPIO_ResetBits(GPIOD,GPIO_Pin_2);
        GPIO_SetBits(GPIOA,GPIO_Pin_8);
        delay_ms(1000);
    }
}


led.c

#include "led.h"
#include "stm32f10x.h"

void LED_Init(void) //PA8 PD2
{
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD,ENABLE);//初始化GPIO时钟
    GPIO_InitTypeDef IOInitStruct;//定义GPIO初始化结构体
    IOInitStruct.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
    IOInitStruct.GPIO_Pin = GPIO_Pin_8; //设置PA8
    IOInitStruct.GPIO_Speed = GPIO_Speed_50MHz; //速度为50MHZ
    
    GPIO_Init(GPIOA,&IOInitStruct); //执行PA8初始化函数
    
    IOInitStruct.GPIO_Pin = GPIO_Pin_2; //设置PD2
    GPIO_Init(GPIOD,&IOInitStruct); //执行PD2初始化函数
    return;
}


led.h

#ifndef __LED_H
#define __LED_H

void LED_Init(void);



#endif

寄存器操作

步骤

  1. 使能IO口时钟。配置寄存器RCC_APB2ENR。
  2. 初始化IO口模式。配置寄存器GPIOxCRH/CRL
  3. 操作IO口,输出高低电平。配置寄存器GPIOx_ODR或者BSRR/BRR

代码

led.c

#include "led.h"
#include "stm32f10x.h"

void LED_Init(void) //A8 D2口时钟与工作方式初始化设置
{
    RCC->APB2ENR |= (1<<5|1<<2); //使能IO口时钟
    GPIOA->CRH &= 0xFFFFFFF0; 
    GPIOA->CRH |= 0x00000003;
    //A8口设置为推挽输出
    GPIOA->ODR |= (1<<8);
    //A8口设置为高电平熄灭
    
    GPIOD->CRL &= 0XFFFFF0FF;
    GPIOD->CRL |= 0X00000300;
    //D2口设置为推挽输出
    GPIOD->ODR |= (1<<2);
    //A8口设置为高电平熄灭
    return;
}

led.h

#ifndef __LED_H

#define __LED_H

void LED_Init();

#endif

main.c

#include "stm32f10x.h"
#include "led.h"
#include "delay.h"

int main(void)
{
    delay_init();
    LED_Init();
    
    while(1)
    {
        GPIOA->ODR = ~(1<<8); //点亮A8
        GPIOD->ODR |= (1<<2); //熄灭D2
        delay_ms(1000);
        GPIOA->ODR |= (1<<8); //熄灭A8
        GPIOD->ODR = ~(1<<2); //点亮D2
        delay_ms(1000);
    }

}


位带操作

步骤

  1. 使能IO口时钟。调用RCC_APB2PeriphClockCmd();
  2. 初始化IO口模式,调用GPIO_Init();
  3. 操作IO口,输出高低电平。使用位带操作。

代码

#include "stm32f10x.h"
#include "sys.h"
#include "delay.h"

int main(void)
{
    delay_init();
    LED_Init();
    
    while(1)
    {
        PDout(2) = 1;
        PAout(8) = 0;
        delay_ms(500);
        PDout(2) = 0;
        PAout(8) = 1;
        delay_ms(500);
    }
}


标签:LED,void,delay,跑马灯,Init,实验,GPIO,include
From: https://www.cnblogs.com/zjq182/p/17178883.html

相关文章

  • 实验一
    实验任务1程序源码//打印一个字符小人#include<stdio.h>#include<stdlib.h>intmain(){printf("O\n");printf("<H>\n");printf("II\n");pr......
  • 实验1
    实验任务1task1代码:#include<stdio.h>intmain(){printf("O\n");printf("<H>\n");printf("II\n");return0;}运行结果:  t......
  • 实验一
    实验任务一程序源代码(task1.1.c)//打印一个字符小人#include<stdio.h>intmain(){printf("o\n");printf("<H>\n");printf("II\n");printf(......
  • 实验1 C语言开发环境使用和类型,运算符,表达式
    //打印一个字符小人#include<stdio.h>intmain(){ printf("O\n"); printf("<H>\n"); printf("II\n");printf("O\n");printf("<H>\n");printf("II\n"......
  • 实验一
    task1-1//垂直方向上打印两个字符小人#include<stdio.h>intmain(){printf("0\n");printf("<H>\n");printf("II\n");printf("0\n");......
  • pinctl和gpio子系统
    pnctrl子系统之前这么操作pinctrl是gpio框架gpio子系统实现引脚功能的配置,如设置为gpio,特殊功能,gpio方向,设置中断常用gpio子系统提供的api函数gpio_request......
  • 实验1
    TEST1实验代码#include<stdio.h>intmain(){ printf("OO\n"); printf("<H><H>\n"); printf("IIII\n"); getchar(); return0;}#include<stdio.h>intmain(......
  • 实验1
    task1代码://打印一个字符小人#include<stdio.h>#include<stdlib.h>intmain(){  printf("o\n");  printf("<H>\n");  printf("II\n");  system("p......
  • 实验一
    任务一#include<stdlib.h>#include<stdio.h>intmain(){ printf("0""0\n"); printf("<H>""<H>\n"); printf("II""II\n"); system("pause"); return0;}......
  • 实验任务一
    实验任务1程序源码(1)//打印一个字符小人#include<stdio.h>#include<stdlib.h>intmain(){printf("O\n");printf("<H>\n");printf("II\n");......