STM32学习(跑马灯实验)

跑马灯实验—库函数

1.使能IO时钟。调用函数RCC_AHB1PeriphClockCmd();不同的外设调用的时钟使能函数可能不一样

2.初始化IO口模式。调用函数GPIO_Init();

3.操作IO口,输出高低电平。GPIO_SetBits();GPIO_ResetBits();

跑马灯硬件电路

 

led.h

#ifndef __LED_H
#define __LED_H
void LED_Init(void);
#endif

led.c

#include "led.h"
#include "stm32f4xx.h"
void LED_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;                 

    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);    //使能GPIOF时钟

    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9|GPIO_Pin_10;     //LED0和LED1对应的IO口
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;             //普通输出模式
    GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;            //推挽输出
    GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;              //上拉
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;         //50MHZ
    GPIO_Init(GPIOF,&GPIO_InitStructure);
    
    GPIO_SetBits(GPIOF,GPIO_Pin_9|GPIO_Pin_10);             //LED0=1,LED1=1
}

main.c

#include "stm32f4xx.h"
#include "led.h"
#include "delay.h"

int main(void)
{
    delay_init(168);                         //初始化延时函数
    LED_Init();                              //初始化LED端口
    while(1)                  
    {
        GPIO_ResetBits(GPIOF,GPIO_Pin_9);      //LED0=0
        GPIO_SetBits(GPIOF,GPIO_Pin_10);       //LED1=1
        delay_ms(500);                         //延时300ms
        GPIO_SetBits(GPIOF,GPIO_Pin_9);        //LED0=1
        GPIO_ResetBits(GPIOF,GPIO_Pin_10);     //LED1=0
        delay_ms(500);
    }
}

跑马灯实验—寄存器

1.使能IO口时钟。配置相关寄存器RCC->AHB1ENR

2.初始化IO口模式。配置四个配置寄存器GPIOx_MODER/GPIOx_OTYPER/GPIOx_OSPEEDR/GPIOx_PUPDR

3.操作IO口,输出高低电平。配置寄存器GPIOX_ODR或者BSRRL/BSRRH

led.c

#include "led.h"
#include "stm32f4xx.h"
void LED_Init(void)
{
    RCC->AHB1ENR|=1<<5;             //使能IO端口时钟
    
    GPIOF->MODER &=~(3<<2*9);       //通用输出模式
    GPIOF->MODER |=1<<(2*9);
    GPIOF->OSPEEDR &=~(3<<2*9);     //50MHZ
    GPIOF->OSPEEDR |=2<<(2*9);
    GPIOF->PUPDR &=~(3<<2*9);       //上拉
    GPIOF->PUPDR |=1<<(2*9);
    GPIOF->OTYPER &=~(1<<9);        //推挽输出
    GPIOF->OTYPER |=0<<9;
    GPIOF->ODR|=1<<9;               //GPIOF9=1
    
    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;
}

main.c

#include "stm32f4xx.h"
#include "led.h"
#include "delay.h"
int main(void)
{
    delay_init(168);
    LED_Init();
    while(1)
    {
        GPIO->ODR &=~(1<<9);
        GPIO->ODR &=~(1<<10);
        delay_ms(500);
        GPIO->ODR |=1<<9;
        GPIO->ODR |=1<<10;
        delay(500);
    }
}

跑马灯实验---位操作

1.使能IO口时钟。调用函数RCC_AHB1PeriphClockCmd();

2.初始化IO口模式。调用函数GPIO_Init();

3.操作IO口,输出高低电平。使用位带操作。

main.c

#include "stm32f4xx.h"
#include "led.h"
#include "delay.h"
int main(void)
{
    delay_init(168);
    LED_Init();
    while(1)
    {
        PFout(9)=1;
        PFout(10)=1;
        delay_ms(500);
        PFout(9)=0;
        PFout(10)=0;
        delay_ms(500);
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实验使用STM32F103C8T6微控制器及Keil MDK-ARM编译器。 首先,我们需要在Keil MDK-ARM中新建一个工程。步骤如下: 1. 打开Keil MDK-ARM软件,点击File -> New Project,弹出新建工程的对话框。 2. 选择STM32F103C8T6芯片,并选择工程的存储路径,点击Next。 3. 在Target选项卡中,选择芯片的时钟频率和调试接口,点击Next。 4. 在Project选项卡中,输入工程的名称和描述,点击Finish。 现在,我们已经创建了一个新的STM32工程,接下来需要编写代码。 1. 在项目文件夹中新建一个main.c文件,并添加以下代码: ```c #include "stm32f10x.h" #include "delay.h" void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; /* 使能GPIOA的时钟 */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); /* 配置GPIOA的Pin5,Pin6,Pin7为推挽输出模式 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); } int main(void) { SystemInit(); /* 配置GPIO */ GPIO_Configuration(); while(1) { /* 点亮Pin5 */ GPIO_SetBits(GPIOA, GPIO_Pin_5); Delay_ms(100); /* 点亮Pin6,同时关闭Pin5 */ GPIO_ResetBits(GPIOA, GPIO_Pin_5); GPIO_SetBits(GPIOA, GPIO_Pin_6); Delay_ms(100); /* 点亮Pin7,同时关闭Pin6 */ GPIO_ResetBits(GPIOA, GPIO_Pin_6); GPIO_SetBits(GPIOA, GPIO_Pin_7); Delay_ms(100); /* 关闭Pin7 */ GPIO_ResetBits(GPIOA, GPIO_Pin_7); Delay_ms(100); } } ``` 2. 配置GPIO 在GPIO_Configuration函数中,我们使用了STM32提供的库函数GPIO_Init来配置GPIOA的Pin5,Pin6和Pin7为推挽输出模式,时钟频率为50MHz。 3. 实现跑马灯效果 在main函数中,我们使用了STM32提供的库函数GPIO_SetBits和GPIO_ResetBits来控制GPIO的输出状态。实现跑马灯效果的原理是依次点亮Pin5,Pin6和Pin7,然后依次关闭Pin5,Pin6和Pin7,循环执行。 4. 编译和下载 在Keil MDK-ARM中编译代码,生成.hex文件。然后,将.hex文件下载到STM32F103C8T6芯片中,即可实现跑马灯效果。 完整代码如下:

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值