MM32F3273G8P火龙果开发板MindSDK开发教程21 - PWM的使用

news2024/11/16 15:29:49

MM32F3273G8P火龙果开发板MindSDK开发教程21 - PWM的使用

1、简述

开发版的LED灯连接PA1脚,而PA1可以映射TIM2_CH2,所以我们用通用定时器2的TIM2_CH2输出PWM到PA1脚,通过更改PWM的占空比,来改变LED的亮度。
在这里插入图片描述
在这里插入图片描述

2、LED灯的初始化

将PA1设定为GPIO_PinMode_AF_PushPull,并开启映射。

void GPIO_PA1_Config(void)
{
    /* gpio. */
    GPIO_Init_Type gpio_init;
    /* PA1 - TIM2_CH2_COMP. */
    gpio_init.Pins  = GPIO_PIN_1;
    gpio_init.PinMode  = GPIO_PinMode_AF_PushPull;
    gpio_init.Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &gpio_init);
    GPIO_PinAFConf(GPIOA, gpio_init.Pins, GPIO_AF_1);
}

3、Tim2的初始化

假定输出1KHZ的pwm波形,tim2的时钟频率为120000000,设定tim2 的prescaler = 120 -1,那么tim2 color = 120000000/(120+1) = 1000000,即StepFreqHz=1000000 。也就是1s钟需要计数1000000次,而0.001s需要计数1000次,所以period = 1000 -1。
TIM_PutChannelValue(TIM2, TIM_CHN_2, 500);/* Change duty cycle. */ 500 即period的一半,占空比=500/1000=50%,250即占空比=25%。

void TIM2_Config(void)
{
    GPIO_PA1_Config();

    /* Set the counter counting step.  1000HZ*/
    TIM_Init_Type tim_init;
    tim_init.ClockFreqHz = 120000000;
    tim_init.StepFreqHz = 1000000;
    tim_init.Period = 1000 - 1u;
    tim_init.EnablePreloadPeriod = false;
    tim_init.PeriodMode = TIM_PeriodMode_Continuous;
    tim_init.CountMode = TIM_CountMode_Increasing;
    TIM_Init(TIM2, &tim_init);

    /* Set the PWM output channel. */
    TIM_OutputCompareConf_Type tim_outcomp_conf;
    tim_outcomp_conf.ChannelValue = 0u;
    tim_outcomp_conf.EnableFastOutput = false;
    tim_outcomp_conf.EnablePreLoadChannelValue = false; /* Disable preload, put data immediately. */
    tim_outcomp_conf.RefOutMode = TIM_OutputCompareRefOut_FallingEdgeOnMatch;
    tim_outcomp_conf.ClearRefOutOnExtTrigger = false;
    tim_outcomp_conf.PinPolarity = TIM_PinPolarity_Rising;
    TIM_EnableOutputCompare(TIM2, TIM_CHN_2, &tim_outcomp_conf);

    /* Start the output compare. */
    TIM_EnableOutputCompareSwitch(TIM2, true);
    TIM_PutChannelValue(TIM2, TIM_CHN_2, 500);/* Change duty cycle. */
    /* Start the counter. */
    TIM_Start(TIM2);
}

4、Letter Shell命令添加

pwn on 开启pwm
pwm off 关闭pwm
pwm freq xx (xx为1-1000的数值)。设定pwm的占空比

int set_pwm(int argc,char *argv[])
{
	if (argc == 2)
	{
		if (!strncmp(argv[1],"on",2))
		{
    		TIM_Start(TIM2);
			printf("PWM On\r\n");
		}
		else if(!strncmp(argv[1],"off",3))
		{
			TIM_Stop(TIM2);
			LED_Off();
			printf("PWM Off\r\n");
		}
		else
		{
			printf("error ,please use 'pwm freq xx(1-1000)' /pwm on /pwm off\r\n");
			return -1;
		}
		
	}
	else if (argc == 3)
	{
		if (!strncmp(argv[1],"freq",4))
		{
			uint16_t period = strtol(argv[2],NULL,10);
			if (period > 0 && period < 1000)
			{
				printf("Pwm duty cycle changed \r\n");
				TIM_Stop(TIM2);
				LED_Off();
				TIM_PutChannelValue(TIM2, TIM_CHN_2, period);/* Change duty cycle. */
				TIM_Start(TIM2);
			}
			else
			{
				printf("error ,please use 'pwm freq xx(1-1000)' /pwm on /pwm off\r\n");
				return -1;
			}

		}
		else
		{
			printf("error ,please use 'pwm freq xx(1-1000)' /pwm on /pwm off\r\n");
			return -1;
		}
	}
	else
	{
		printf("error ,please use 'pwm freq xx(1-1000)' /pwm on /pwm off\r\n");
		return -1;
	}

    return 0;
}

SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN), pwm, set_pwm, set_pwm);

5、现象

输入pwm freq 200 以及pwm freq 800的波形图如下:
在这里插入图片描述
在这里插入图片描述

6、代码

下载路径

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/655446.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

读数据压缩入门笔记06_上下文转换

1. 压缩算法可归为两类 1.1. 统计压缩&#xff08;即VLC&#xff09; 1.2. 字典压缩&#xff08;如LZ78&#xff09; 1.3. 从不同的角度利用了给定数据流中存在的统计冗余信息 2. 上下文变换 2.1. contextual transform 2.2. 给定一组相邻的符号集&#xff0c;对它们进行…

代码审计——任意文件下载详解

为方便您的阅读&#xff0c;可点击下方蓝色字体&#xff0c;进行跳转↓↓↓ 01 漏洞描述02 审计要点03 漏洞特征04 漏洞案例05 修复方案 01 漏洞描述 网站可能提供文件查看或下载的功能&#xff0c;如果对用户查看或下载的文件不做限制&#xff0c;就能够查看或下载任意的文件&…

大数据相关概念了解

Hadoop生态及Hive、HBase、Impala、HDFS之间的关系 Hadoop生态(什么是 Hadoop) Apache Hadoop软件库是一个框架&#xff0c;允许使用简单的编程模型在计算机集群之间对大型数据集进行分布式处理。它旨在从单个服务器扩展到数千台计算机&#xff0c;每台计算机都提供本地计算和…

【雕爷学编程】Arduino动手做(112)---2.4G24L01无线模块

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

chatgpt赋能python:Python怎么调整黑色的SEO?

Python怎么调整黑色的SEO&#xff1f; 在当今互联网的大环境下&#xff0c;各种搜索引擎的存在具有巨大的价值&#xff0c;特别是Google&#xff0c;百度等常用搜索引擎的SEO排名对于企业、个人品牌的宣传有着极其重要的意义。但是&#xff0c;如果出现黑色SEO的情况&#xff…

Spark操作HBase的数据,实现列值的计算

本文将介绍如何使用Spark操作HBase的数据&#xff0c;实现列之间的计算&#xff0c;以特征值计算为例。特征值是指从原始数据中提取出来的具有代表性或判别性的数值&#xff0c;可以用于数据分析或机器学习等领域。本文将使用hbase-spark连接器&#xff0c;通过Spark RDD的方式…

深度解析:圣湘生物的数字化转型升级之路(附方案详情)

随着“互联网”医疗技术在医疗行业的应用不断深化&#xff0c;数字化正在加速推进IVD行业的创新。 当前&#xff0c;IVD企业应对机遇和挑战的核心是提升竞争力。 IVD企业基于企业资源&#xff0c;提升综合竞争力主要分【硬实力】和【软实力】。 一方面&#xff1a;需要企业不…

跟李沐学AI;Meta可能让其开源AI模型商业化,让开发者赚钱

&#x1f989; AI新闻 &#x1f680; Meta可能让其开源AI模型商业化&#xff0c;让开发者赚钱 摘要&#xff1a;Meta正考虑将其开源大语言模型&#xff08;LLM&#xff09;的下一个版本用于商业用途&#xff0c;这可以为聊天机器人等提供支持。此举可能会让更多开发者使用替代…

张量分解(Cp、Tuker、Block-Term)

张量 张量是向量或矩阵在维度空间上的高阶扩展。 一个 ( p , q ) (p,q) (p,q)型的张量 T T T被定义为一个多重线性映射。 T : V ∗ ⋯ V ∗ V ⋯ V ↦ R , T:V^* \times \dots \times V^* \times V \times \dots \times V \mapsto \R, T:V∗⋯V∗V⋯V↦R, 其中 V V V 是…

用GPT4写2023高考语文作文,新课标I卷,Ⅱ卷

文章目录 新课标Ⅰ卷新课标Ⅱ卷总结 每年的高考语文题目都会是热议的话题&#xff0c;今年同样也不例外。但是今年讨论的话题除了作文题目本身之外&#xff0c;对于chatgpt写出的作文会是什么样子的也​让广大网友同样期待 新课标Ⅰ卷 好的故事&#xff0c;可以帮我们更好地表达…

chatgpt赋能python:Python怎么让结果同行输出

Python怎么让结果同行输出 在Python编程中&#xff0c;我们经常需要打印出一系列的结果并在同一行输出。这对于输出更为整洁的结果和提高代码清晰度都是非常有帮助的。下面就让我们来介绍一些实现这一功能的方法。 方法一&#xff1a;使用 end 参数 在Python的 print() 函数…

机器视觉_HALCON_模板匹配_1.CreateScaledShapeModel

文章目录 一、前言二、create_scaled_shape_model 算子2.1 名称2.2 算子签名2.3 描述2.3.1 输入参数详述2.3.2 完整的预生成模型 2.4 执行信息2.5 参数2.6 执行结果2.7 可能的前驱算子2.8 可能的后继算子2.9 替代选择 一、前言 在HALCON算子手册中&#xff0c;对算子的介绍通常…

chatgpt赋能python:Python访问数据库

Python访问数据库 Python是一种高级编程语言&#xff0c;在数据分析、科学计算和Web开发等领域都有广泛的应用。Python还有一个很强的优势就是它能够方便地访问数据库。在本文中&#xff0c;我们将介绍Python如何与数据库交互以及Python数据库API的使用。 Python的数据库API …

chatgpt赋能python:Python如何访问数组中的元素

Python如何访问数组中的元素 Python是一种高级编程语言&#xff0c;访问数组中的元素也非常简单。 它提供了一种简单而灵活的方式访问数组中的元素&#xff0c;这使得在Python中使用数组变得非常容易。在本文中&#xff0c;我们将介绍如何在Python中访问数组中的元素以及如何使…

DecimalFormat基本用法

1.保留两位小数(截断&#xff09; 下面展示一些 内联代码片。 double num 11.256;DecimalFormat df new DecimalFormat("#.##");//指定RoundingModedf.setRoundingMode(RoundingMode.DOWN);String str df.format(num);double formatNum Double.parseDouble(str)…

2023年05月份青少年软件编程Scratch试卷三级真题

2023-05 Scratch三级真题 分数&#xff1a;100 题数&#xff1a;38 测试时长&#xff1a;60min 一、单选题(共25题&#xff0c;共50分) 1. 关于变量&#xff0c;下列描述错误的是&#xff1f;&#xff08;A&#xff09;&#xff08;2分&#xff09; &#xff08;变量那一栏…

对于ChatGPT,马化腾、马斯克等科技大佬竟然这么说!

ChatGPT一夜爆火之后&#xff0c;国内几乎是各大互联网公司都在摩拳擦掌&#xff0c;跃跃欲试&#xff0c;从百度的文心一言&#xff0c;到阿里的通义千问&#xff0c;还有360的智脑&#xff0c;讯飞的星火&#xff0c;语言大模型如雨后春笋一般涌出&#xff0c;犹如2014年新能…

代码审计——未授权访问详解

为方便您的阅读&#xff0c;可点击下方蓝色字体&#xff0c;进行跳转↓↓↓ 01 漏洞描述02 审计要点03 漏洞特征04 漏洞案例05 修复方案 01 漏洞描述 未授权访问漏洞&#xff0c;是在攻击者没有获取到登录权限或未授权的情况下&#xff0c;或者不需要输入密码&#xff0c;即可通…

express 基础知识实战

1 Express框架介绍与安装 1.1 Express 安装 生成配置文件package.json npm init --yes安装 Express 框架&#xff0c;就是使用 npm 的命令。 npm install express --save yarn add express --save初次使用 const express require(express) //实例化express const app ex…

全志V3S嵌入式驱动开发(u盘写读)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 对于现在的soc来说&#xff0c;基本上usb是标配的。它一般需要支持usb host、device和otg三种模式。简单解释下&#xff0c;host模式&#xff0c;就…