【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

相关文章

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

Java+AI驱动实现PDF文件数据提取与解析

《Java+AI驱动实现PDF文件数据提取与解析》本文将和大家分享一套基于AI的体检报告智能评估方案,详细介绍从PDF上传、内容提取到AI分析、数据存储的全流程自动化实现方法,感兴趣的可以了解下... 目录一、核心流程:从上传到评估的完整链路二、第一步:解析 PDF,提取体检报告内容1. 引入依赖2. 封装

Python多线程实现大文件快速下载的代码实现

《Python多线程实现大文件快速下载的代码实现》在互联网时代,文件下载是日常操作之一,尤其是大文件,然而,网络条件不稳定或带宽有限时,下载速度会变得很慢,本文将介绍如何使用Python实现多线程下载... 目录引言一、多线程下载原理二、python实现多线程下载代码说明:三、实战案例四、注意事项五、总结引

Python多线程应用中的卡死问题优化方案指南

《Python多线程应用中的卡死问题优化方案指南》在利用Python语言开发某查询软件时,遇到了点击搜索按钮后软件卡死的问题,本文将简单分析一下出现的原因以及对应的优化方案,希望对大家有所帮助... 目录问题描述优化方案1. 网络请求优化2. 多线程架构优化3. 全局异常处理4. 配置管理优化优化效果1.

Qt中实现多线程导出数据功能的四种方式小结

《Qt中实现多线程导出数据功能的四种方式小结》在以往的项目开发中,在很多地方用到了多线程,本文将记录下在Qt开发中用到的多线程技术实现方法,以导出指定范围的数字到txt文件为例,展示多线程不同的实现方... 目录前言导出文件的示例工具类QThreadQObject的moveToThread方法实现多线程QC

RabbitMQ消费端单线程与多线程案例讲解

《RabbitMQ消费端单线程与多线程案例讲解》文章解析RabbitMQ消费端单线程与多线程处理机制,说明concurrency控制消费者数量,max-concurrency控制最大线程数,prefe... 目录 一、基础概念详细解释:举个例子:✅ 单消费者 + 单线程消费❌ 单消费者 + 多线程消费❌ 多

Linux之platform平台设备驱动详解

《Linux之platform平台设备驱动详解》Linux设备驱动模型中,Platform总线作为虚拟总线统一管理无物理总线依赖的嵌入式设备,通过platform_driver和platform_de... 目录platform驱动注册platform设备注册设备树Platform驱动和设备的关系总结在 l

Javaee多线程之进程和线程之间的区别和联系(最新整理)

《Javaee多线程之进程和线程之间的区别和联系(最新整理)》进程是资源分配单位,线程是调度执行单位,共享资源更高效,创建线程五种方式:继承Thread、Runnable接口、匿名类、lambda,r... 目录进程和线程进程线程进程和线程的区别创建线程的五种写法继承Thread,重写run实现Runnab

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

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

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