当前位置: 首页 > news >正文

ARM单片机实现流水灯(GD32)

 根据上图可知使用的引脚分别是PA8,PE6,PF6流水灯功能的实现要分别初始化这几个引脚

流水灯实现

编写流水灯代码

LED.C

#include "gd32f30x.h"                   // Device header
#include "Delay.h"
// 初始化LED灯
void LED_Init(void){// 使能RCU时钟rcu_periph_clock_enable(RCU_GPIOA);// 配置引脚输出频率gpio_init( GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_2MHZ, GPIO_PIN_8);// 初始化GPIOE的引脚rcu_periph_clock_enable(RCU_GPIOE);// 配置引脚输出频率gpio_init( GPIOE, GPIO_MODE_OUT_PP, GPIO_OSPEED_2MHZ, GPIO_PIN_6);// 初始化GPIOE的引脚rcu_periph_clock_enable(RCU_GPIOF);// 配置引脚输出频率gpio_init( GPIOF, GPIO_MODE_OUT_PP, GPIO_OSPEED_2MHZ, GPIO_PIN_6);
}// 实现循环流水灯的功能
void LED_Cycle(void){DelayInit();while(1){gpio_bit_set(GPIOA, GPIO_PIN_8); DelayNms(1000);gpio_bit_reset(GPIOA, GPIO_PIN_8);DelayNms(1000);gpio_bit_set(GPIOE, GPIO_PIN_6); DelayNms(1000);gpio_bit_reset(GPIOE, GPIO_PIN_6);DelayNms(1000);gpio_bit_set(GPIOF, GPIO_PIN_6); DelayNms(1000);gpio_bit_reset(GPIOF, GPIO_PIN_6);DelayNms(1000);}}

LED.H

#ifndef _LED_H_
#define _LED_H_
// led灯初始化
void LED_Init(void);
// 实现循环流水灯的功能
void LED_Cycle(void);#endif

Delay.c

#include <stdint.h>
#include "gd32f30x.h"/**
***********************************************************
* @brief DWT初始化配置
* @param
* @return 
***********************************************************
*/
void DelayInit(void) 
{/* 关闭 TRC */CoreDebug->DEMCR &= ~CoreDebug_DEMCR_TRCENA_Msk;/* 打开 TRC */CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;/* 关闭计数功能 */DWT->CTRL &= ~DWT_CTRL_CYCCNTENA_Msk;/* 打开计数功能 */DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk;/* 计数清零 */DWT->CYCCNT = 0;
}/**
***********************************************************
* @brief 微秒级延时函数
* @param nUs,最大延时时间( 2^32 / 内核主频 ) * 10^6 us 
* @return 
***********************************************************
*/
void DelayNus(uint32_t nUs)
{uint32_t tickStart = DWT->CYCCNT;/* 转换为nUs对应的时钟跳动次数*/nUs *= (rcu_clock_freq_get(CK_AHB) / 1000000);/* 延时等待 */while ((DWT->CYCCNT - tickStart) < nUs);
}/**
***********************************************************
* @brief 毫秒级延时函数
* @param nMs,延时时间n毫秒
* @return 
***********************************************************
*/
void DelayNms(uint32_t nMs)
{for (uint32_t i = 0; i < nMs; i++){DelayNus(1000);}
}

Delay.h

#ifndef _DELAY_H_
#define _DELAY_H_
void DelayInit(void);
void DelayNus(uint32_t nUs);
void DelayNms(uint32_t nMs);
#endif

main.c

#include <stdint.h>
#include "gd32f30x.h"
#include "Delay.h"
#include "LED.h"int main(void)
{    DelayInit();LED_Init();LED_Cycle();while(1){} }

http://www.lryc.cn/news/346698.html

相关文章:

  • 操作系统基础之磁盘
  • 【Unity Shader入门精要 第6章】基础光照(一)
  • JavaEE概述 + Maven
  • python把png转成jpg
  • 信息系统架构基本概念及发展_2.信息系统架构的定义
  • ctfshow SSRF 351-358
  • 优化学习方法,事半功倍
  • Spring STOMP-开启STOMP
  • Python 开发 框架安全:Django SQL注入漏洞测试.(CVE-2021-35042)
  • 《Python编程从入门到实践》day25
  • Unity 性能优化之光照优化(七)
  • C语言 | Leetcode C语言题解之第84题柱状图中最大的矩形
  • AI办公自动化-用kimi批量重命名Word文档
  • Golang 并发 Mutex 互斥锁的使用
  • 20232906 2023-2024-2 《网络与系统攻防技术》第九次作业
  • 常见的十二种软件架构
  • 数据库出现死锁的解决方法参考
  • HCIP-Datacom-ARST自选题库_01_防火墙【6道题】
  • 力扣/leetcode383.比特位记数
  • react18【系列实用教程】useEffect —— 副作用操作 (2024最新版)
  • Excel 分组汇总后删除明细
  • docker runc升级1.1.12
  • C++接口:构建模块化与可扩展的软件架构
  • 【讲解下目标追踪】
  • 实时Linux对EtherCAT工业自动化协议的支持
  • ViLT 浅析
  • 7-117 死亡隧道
  • java数据结构与算法(链表归并排序)
  • 最新网页版USB转串口芯片CH340中文规格书手册(20240511)
  • 关于 MongoDB 数据库基本操作的详细介绍