STM32利用标准库编写同时输出4路PWM信号的程序(Proteus)仿真

news/2024/4/27 20:24:47

先看看结果:

这个是根据上午发的文章的基础上更改的,很简单,只是用了一个定时器,初始化了4个比较器而已,就可以单独的控制每一路PWM的占空比了,好了,把源文件展示一下,完事去接孩子放学。

PWM.c文件:

#include "stm32f10x.h"                  // Device headervoid PWM_Init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);TIM_InternalClockConfig(TIM2);TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInitStruct.TIM_Period = 100-1;TIM_TimeBaseInitStruct.TIM_Prescaler = 720-1;TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0;TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStruct);TIM_OCInitTypeDef TIM_OCInitStruct;TIM_OCStructInit(&TIM_OCInitStruct);TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1;TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High;TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;TIM_OCInitStruct.TIM_Pulse = 0;TIM_OC1Init(TIM2, &TIM_OCInitStruct);TIM_OC2Init(TIM2, &TIM_OCInitStruct);TIM_OC3Init(TIM2, &TIM_OCInitStruct);TIM_OC4Init(TIM2, &TIM_OCInitStruct);GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 |GPIO_Pin_3;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStruct);TIM_Cmd(TIM2, ENABLE);}//  设置PWM的函数,第一个参数是第几个比较器的意思,   第二个参数是这个比较器的值是多少?
void SET_PWM(uint16_t num, uint16_t key)
{if(num == 1){TIM_SetCompare1(TIM2, key);}if(num == 2){TIM_SetCompare2(TIM2, key);}if(num == 3){TIM_SetCompare3(TIM2, key);}if(num == 4){TIM_SetCompare4(TIM2, key);}
}

PWM.h文件:

#ifndef __PWM_H
#define __PWM_Hvoid PWM_Init(void);void SET_PWM(uint16_t num, uint16_t key);#endif

main.c主函数文件:

#include "stm32f10x.h"                  // Device header
#include "OLED.h"
#include "PWM.h"int main(void)
{OLED_Init();       //oled  屏幕初始化PWM_Init();SET_PWM(1, 10);   //设置通道1的占空比为10%SET_PWM(2, 20);   //设置通道2的占空比为20%SET_PWM(3, 30);   //设置通道3的占空比为30%SET_PWM(4, 40);   //设置通道4的占空比为40%while(1){}
}

其实整个过程只是增加了一个函数而已:这个函数就是:

好了,自己理解吧。

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

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

相关文章

银行数字人民币系统应用架构设计

2019年10月,01区块链联合数字资产研究院发布了《人民币3.0:中国央行数字货币运行框架与技术解析》,从数字货币界定和人民币发展历程出发,区分了央行数字货币与比特币、移动支付等的区别,全面介绍了央行数字货币的发展历…

系统大屏可视化展示平台解决方案(原件)

1.系统概述 1.1.需求分析 1.2.重难点分析 1.3.重难点解决措施 2.系统架构设计 2.1.系统架构图 2.2.关键技术 2.3.接口及要求 3.系统功能设计 3.1.功能清单列表 3.2.数据源管理 3.3.数据集管理 3.4.视图管理 3.5.仪表盘管理 3.6.移动端设计 3.7.系统权限设计 3.8.数据查询过程设…

无人机采集图像的相关知识

1.飞行任务规划 一般使用飞行任务规划软件进行飞行任务的设计,软件可以自动计算相机覆盖和图像重叠情况。比如ArduPilot (ArduPilot - Versatile, Trusted, Open) 和UgCS (http://www.ugcs.com)是两个飞行任务规划软件,可以适用大多数无人机系统。 2.图…

JavaScript高级(十三)---ES6中Set,map

ES6 Set 在ES6之前,我们存储数据的结构主要有两种:数组、对象。 在ES6中新增了另外两种数据结构:Set、Map,以及它们的另外形式WeakSet、WeakMap。 Set是一个新增的数据结构,可以用来保存数据,类似于数组&a…

STM32--RC522学习记录

一&#xff0c;datasheet阅读记录 1.关于通信格式 2.读寄存器 u8 RC522_ReadReg(u8 address) {u8 addr address;u8 data0x00;addr((addr<<1)&0x7e)|0x80;//将最高位置一表示read&#xff0c;最后一位按照手册建议变为0Spi_Start();//选中从机SPI2_ReadWriteByte(ad…

Python爬虫-批量爬取星巴克全国门店

前言 本文是该专栏的第22篇,后面会持续分享python爬虫干货知识,记得关注。 本文笔者以星巴克为例,通过Python实现批量爬取目标城市的门店数据以及全国的门店数据。 具体的详细思路以及代码实现逻辑,跟着笔者直接往下看正文详细内容。(附带完整代码) 正文 地址:aHR0cHM…