【MC3172多线程开发板初体验2】---GPIO驱动RGB七彩灯

2023-10-23 10:40

本文主要是介绍【MC3172多线程开发板初体验2】---GPIO驱动RGB七彩灯,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、目的

        通过配置MC3172开发板的GPIO,多线程并行驱动RGB七彩灯

二、 资料分享:

1.Gitee库:MC3172: 厦门感芯科技公司的MC3172多线程开发板的开发资料和驱动文件 (gitee.com)

2.百度网盘:

链接:https://pan.baidu.com/s/1bD8frJq9RrVwL1AyDJVgHg 
提取码:5sui

 上述资料中Hardware文件为个人驱动,大家可自行添加。

三、准备过程

硬件平台:MC3172开发板

软件平台:MonuRiver Studio 1.81

 

四、实现原理简介

        给RGB七彩灯配置3个GPIO口,通过多线程分别控制R,G,B三种颜色,并且控制每种颜色的持续时间,从而根据颜色叠加产生七种颜色。

 

 

五、代码编写(函数功能可参考芯片手册)

1.新建GPIO驱动文件

#ifndef _GPIO_H_
#define _GPIO_H_#include "../MC3172/MC3172.h"void GPIO_Init(u32 gpio_sel , u32 gpio_pin , u32 IO);#endif /* _GPIO_H_ */
#include "GPIO.h"void GPIO_Init(u32 gpio_sel , u32 gpio_pin , u32 IO)
{//启动外设INTDEV_SET_CLK_RST(gpio_sel,(INTDEV_RUN|INTDEV_IS_GROUP0|INTDEV_CLK_IS_CORECLK_DIV2));if (IO == 1){GPIO_SET_INPUT_EN_VALUE(gpio_sel , gpio_pin , GPIO_SET_DISABLE);    //输入使能}else{GPIO_SET_OUTPUT_EN_VALUE(gpio_sel,gpio_pin,GPIO_SET_ENABLE);      //输出使能}
}

2.新建Timer驱动文件,封装delay_us延时函数,详情可参考大佬文章

#ifndef HARDWARE_TIMER_H_
#define HARDWARE_TIMER_H_#include "../MC3172/MC3172.h"#define  SYS_CORE_CLK_MHZ  48void delay_us(u32 nus);#endif /* HARDWARE_TIMER_H_ */

#include "Timer.h"void delay_us(u32 nus)
{u32 start,stop,ticks;start=CORE_CNT;ticks = nus * SYS_CORE_CLK_MHZ/4;     //内核定时器频率为内核时钟的1/4if(0xFFFFFFFF-start>=ticks){stop=start+ticks;while(CORE_CNT<stop && CORE_CNT>start){}}else{stop=ticks-(0xFFFFFFFF-start);while(CORE_CNT>start){}while(CORE_CNT<stop){}}
}

 3.编辑main.c函数


#include "../MC3172/MC3172.h"
//#include "./GPIO_GPCOM_TIMER_Example.c"
#include "../Hardware/printf.h"
#include "../Hardware/uart.h"
#include "../Hardware/GPIO.h"
#include "../Hardware/Timer.h"void thread_end(void)
{while(1);
}void thread0_main(void)
{Uart_Init(COM8, 115200);   //串口初始化GPIO_Init(GPIOA_BASE_ADDR, (GPIO_PIN0|GPIO_PIN2|GPIO_PIN4), 0);    //GPIO初始化GPIO_SET_OUTPUT_PIN_TO_1(GPIOA_BASE_ADDR , (GPIO_PIN0|GPIO_PIN2|GPIO_PIN4));    //初始化R,G,B三引脚输出高电平while(1){//user code section}thread_end();
}void thread1_main(void)
{while(1){delay_us(1000000);GPIO_SET_OUTPUT_PIN_INV(GPIOA_BASE_ADDR , GPIO_PIN0);    //电平翻转//user code section}thread_end();
}void thread2_main(void)
{while(1){delay_us(2000000);GPIO_SET_OUTPUT_PIN_INV(GPIOA_BASE_ADDR , GPIO_PIN2);    //电平翻转//user code section}thread_end();
}void thread3_main(void)
{while(1){delay_us(4000000);GPIO_SET_OUTPUT_PIN_INV(GPIOA_BASE_ADDR , GPIO_PIN4);    //电平翻转//user code section}thread_end();
}

4.配置时钟及栈空间

        可自行根据需要进行配置

5.编译烧录(可参考文章1的编译烧录部分)

六、实验现象

多线程RGB七彩灯

这篇关于【MC3172多线程开发板初体验2】---GPIO驱动RGB七彩灯的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/267326

相关文章

使用Python实现可恢复式多线程下载器

《使用Python实现可恢复式多线程下载器》在数字时代,大文件下载已成为日常操作,本文将手把手教你用Python打造专业级下载器,实现断点续传,多线程加速,速度限制等功能,感兴趣的小伙伴可以了解下... 目录一、智能续传:从崩溃边缘抢救进度二、多线程加速:榨干网络带宽三、速度控制:做网络的好邻居四、终端交互

python多线程并发测试过程

《python多线程并发测试过程》:本文主要介绍python多线程并发测试过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、并发与并行?二、同步与异步的概念?三、线程与进程的区别?需求1:多线程执行不同任务需求2:多线程执行相同任务总结一、并发与并行?1、

Python多进程、多线程、协程典型示例解析(最新推荐)

《Python多进程、多线程、协程典型示例解析(最新推荐)》:本文主要介绍Python多进程、多线程、协程典型示例解析(最新推荐),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 目录一、multiprocessing(多进程)1. 模块简介2. 案例详解:并行计算平方和3. 实现逻

如何在Ubuntu上安装NVIDIA显卡驱动? Ubuntu安装英伟达显卡驱动教程

《如何在Ubuntu上安装NVIDIA显卡驱动?Ubuntu安装英伟达显卡驱动教程》Windows系统不同,Linux系统通常不会自动安装专有显卡驱动,今天我们就来看看Ubuntu系统安装英伟达显卡... 对于使用NVIDIA显卡的Ubuntu用户来说,正确安装显卡驱动是获得最佳图形性能的关键。与Windo

嵌入式Linux之使用设备树驱动GPIO的实现方式

《嵌入式Linux之使用设备树驱动GPIO的实现方式》:本文主要介绍嵌入式Linux之使用设备树驱动GPIO的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、设备树配置1.1 添加 pinctrl 节点1.2 添加 LED 设备节点二、编写驱动程序2.1

嵌入式Linux驱动中的异步通知机制详解

《嵌入式Linux驱动中的异步通知机制详解》:本文主要介绍嵌入式Linux驱动中的异步通知机制,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、异步通知的核心概念1. 什么是异步通知2. 异步通知的关键组件二、异步通知的实现原理三、代码示例分析1. 设备结构

usb接口驱动异常问题常用解决方案

《usb接口驱动异常问题常用解决方案》当遇到USB接口驱动异常时,可以通过多种方法来解决,其中主要就包括重装USB控制器、禁用USB选择性暂停设置、更新或安装新的主板驱动等... usb接口驱动异常怎么办,USB接口驱动异常是常见问题,通常由驱动损坏、系统更新冲突、硬件故障或电源管理设置导致。以下是常用解决

Java使用多线程处理未知任务数的方案介绍

《Java使用多线程处理未知任务数的方案介绍》这篇文章主要为大家详细介绍了Java如何使用多线程实现处理未知任务数,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 知道任务个数,你可以定义好线程数规则,生成线程数去跑代码说明:1.虚拟线程池:使用 Executors.newVir

QT移植到RK3568开发板的方法步骤

《QT移植到RK3568开发板的方法步骤》本文主要介绍了QT移植到RK3568开发板的方法步骤,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录前言一、获取SDK1. 安装依赖2. 获取SDK资源包3. SDK工程目录介绍4. 获取补丁包二

JAVA封装多线程实现的方式及原理

《JAVA封装多线程实现的方式及原理》:本文主要介绍Java中封装多线程的原理和常见方式,通过封装可以简化多线程的使用,提高安全性,并增强代码的可维护性和可扩展性,需要的朋友可以参考下... 目录前言一、封装的目标二、常见的封装方式及原理总结前言在 Java 中,封装多线程的原理主要围绕着将多线程相关的操