1:PWM脉冲宽度调制

STM32 的定时器除了 TIM6 和 7。其他的定时器都可以用来产生 PWM 输出。其中高级定
时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出。而通用定时器也能同时产生多达 4
路的 PWM 输出,这样,STM32 最多可以同时产生 30 路 PWM 输出!

2;本次实验只需将上个实验的time.c卤藕做修改即可

1)新增void TIM3_PWM_Init(u16 arr,u16 psc) 函数;

a,TIM3时钟使能

b,使能GPIO端口和复用

c,端口映射TIM3----PB5

1 GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);

d,GPIOB端口初始化

1     GPIO_InitStructURE.GPIO_Pin = GPIO_Pin_5;//LED2
2 GPIO_InitStructURE.GPIO_Mode = GPIO_Mode_AF_PP; //推挽复用输出
3 GPIO_InitStructURE.GPIO_Speed = GPIO_Speed_50MHz;
4 GPIO_Init(GPIOB,&GPIO_InitStructURE);

e,初始化TIM3

1     TIM_TimeBaseStructure.TIM_Period = arr; //重装载周期
2 TIM_TimeBaseStructure.TIM_Prescaler =psc; //自动重装载值
3 TIM_TimeBaseStructure.TIM_ClockDivision = 0; //时钟分频0
4 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数
5 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

f,初始化 TIM3 Channel2 PWM 模式,并使能TIM3

1     TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM2;//PWM2
2 TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;//比较输出使能
3 TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High;//输出极性为高
4 TIM_OC2Init(TIM3,&TIM_OCInitStruct);
5 TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能CRR2上的预装在寄存器
6 TIM_Cmd(TIM3,ENABLE);

void TIM_OC2Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
这种初始化格式大家学到这里应该也熟悉了,所以我们直接来看看结构体 TIM_OCInitTypeDef
的定义:
typedef struct
{
uint16_t TIM_OCMode;
ALIENTEK 精英 STM32F103 V1 开发板教程
219
STM32 F1 开发指南( 精英 板- - 库函数 版) )
uint16_t TIM_OutputState;
uint16_t TIM_OutputNState; */
uint16_t TIM_Pulse;
uint16_t TIM_OCPolarity;
uint16_t TIM_OCNPolarity;
uint16_t TIM_OCIdleState;
uint16_t TIM_OCNIdleState;
} TIM_OCInitTypeDef;
这里我们讲解一下与我们要求相关的几个成员变量:
参数 TIM_OCMode 设置模式是 PWM 还是输出比较,这里我们是 PWM 模式。
参数 TIM_OutputState 用来设置比较输出使能,也就是使能 PWM 输出到端口。
参数 TIM_OCPolarity 用来设置极性是高还是低。
其他的参数 TIM_OutputNState,TIM_OCNPolarity,TIM_OCIdleState 和 TIM_OCNIdleState 是
高级定时器 TIM1 和 TIM8 才用到的。

2)主函数

通过修改 TIM3_CCR2 则可以控制 CH2 的输出占空比。继而控制 DS0 的亮度。
在库函数中,修改 TIM3_CCR2 占空比的函数是:
void TIM_SetCompare2(TIM_TypeDef* TIMx, uint16_t Compare2);
理所当然,对于其他通道,分别有一个函数名字,函数格式为 TIM_SetComparex(x=1,2,3,4)。

参数:Compare2  调节PWM波占空比

 1     while(1)
2 {
3 delay_ms(10);
4 if(dir)led2pwmval++;
5 else led2pwmval--;
6 if(led2pwmval==500)dir=0;
7 if(led2pwmval==0)dir=1;
8 TIM_SetCompare2(TIM3,led2pwmval);
9 }
10 }

TIME3_PWM_Init(899,0);//10KHZ  (7200)/9000 =80khz

基于霸道秉火的STM32F103ZET6嵌入式开发之------基于定时TIM3的PWM实验的更多相关文章

  1. 基于霸道秉火的STM32F103ZET6嵌入式开发之------定时器中断3

    1 #include "time.h" 2 #include "led.h" 3 #include "beep.h" 4 //¶¨Ê±Æ÷Ö ...

  2. 在秉火STM32F429挑战者开发板上移植Huawei LiteOS指南

    昨天在B站上突然看到了一个短视频,是在正点原子的战舰V3开发板上移植华为的Huawei LiteOS操作系统,就是这个视频:看完鸿蒙OS发布会,试用华为的物联网操作系统Lite OS(B站),于是呢, ...

  3. 基于Vivado的嵌入式开发 ——PS+PL实践

    基于Vivado的嵌入式开发 ——PS走起 硬件平台:ZedBoard 开发工具:Vivado 2014.2 1.规划 废话不多说,依然是流水灯,这次是采用PS+PL实现. 功能依旧简单,目标是为了学 ...

  4. Mac下搭建基于PlatformIO的嵌入式开发环境(STM32开发)

    PlatformIO简介 PlatformIO是开源的物联网开发生态系统.提供跨平台的代码构建器.集成开发环境(IDE),兼容 Arduino,ESP8266和mbed等 支持在Windows.Lin ...

  5. 嵌入式开发—C语言面试题

    嵌入式开发—C语言面试题 源地址:http://blog.csdn.net/xdx2ct1314/article/details/7358929   1. 用预处理指令#define 声明一个常数,用 ...

  6. linux交叉环境的搭建以及嵌入式开发概述

    嵌入式开发概述 由嵌入式本身的特性所影响,嵌入式系统开发与通用系统的开发有很大的区别,嵌入式的开发分为系统总体开发,嵌入式硬件开发,嵌入式系统软件开发3大部分 在系统总体开发中,由于嵌入式系统与硬件依 ...

  7. 转:Qt 嵌入式开发环境搭建

    地址: http://www.cnblogs.com/lishixian/articles/3013897.html         作者:lsx_007 这里主要是记录了自己在搭建嵌入式开发环境时阅 ...

  8. 与一线Linux嵌入式开发project师的对话

    转:与一线Linux嵌入式开发project师的对话 陈project师一直做Linux的嵌入式开发.作为在开发一线的project师.他对非常多问题的看法可能更切合实际需求,于是,通过邮件.就嵌入式 ...

  9. 【嵌入式开发】写入开发板Linux系统-模型S3C6410

    笔者 : 万境绝尘 转载请著名出处 最终拿到板子了, 嵌入式开发正式开启. 板子型号 : 三星 S3C6410 基于ARM11, 指令集基于arm6指令集; 为毛不是 Cortext A9的板子; 烧 ...

随机推荐

  1. P4249-[WC2007]剪刀石头布【费用流】

    正题 题目链接:https://www.luogu.com.cn/problem/P4249 题目大意 \(n\)个点的竞赛图有的边已经确定了方向,要求给剩下的边确定一个方向使得图的三元环最多. \( ...

  2. CF1511G-Chips on a Board【倍增】

    正题 题目链接:https://www.luogu.com.cn/problem/CF1511G 题目大意 给出\(n*m\)的棋盘上每一行有一个棋子,双方轮流操作可以把一个棋子向左移动若干步(不能不 ...

  3. P4643-[国家集训队]阿狸和桃子的游戏【结论】

    正题 题目链接:https://www.luogu.com.cn/problem/P4643 题目大意 给出\(n\)个点\(m\)条边的无向图,两个人轮流选择一个未被选择的点加入点集. 然后每个人的 ...

  4. 【.Net vs Java? 】 先来看一下Java和C#的数据类型区别。

    新工作.Net和Java都要做,早期也做过一段Java的项目,但没有系统的深入学习过.一直觉得这两门语言估计是最相近的两门语言了,好多代码可以说直接拷过来都不带报错的,但仔细推敲还是有很多的不同. 1 ...

  5. 干货分享之Spring框架源码解析01-(xml配置解析)

    记录并分享一下本人学习spring源码的过程,有什么问题或者补充会持续更新.欢迎大家指正! 环境: spring5.X + idea Spring 是一个工厂,是一个负责对象的创建和维护的工厂.它给我 ...

  6. LDAP-初见

    目录 什么是LDAP? LDAP 协议能解决什么问题? Spring Boot中使用LDAP来统一管理用户信息 添加用户 连接LDAP服务端 什么是LDAP? LDAP 的全称是 Lightweigh ...

  7. Hive面试题整理(一)

    1.Hive表关联查询,如何解决数据倾斜的问题?(☆☆☆☆☆)   1)倾斜原因:map输出数据按key Hash的分配到reduce中,由于key分布不均匀.业务数据本身的特.建表时考虑不周.等原因 ...

  8. 微软Windows11安卓子系统已支持运行APK 应用(附手把手详细安装攻略)怎么安装安卓/如何安装安卓应用/支持多窗口多任务

    ​​ 10 月 21 日消息,微软博客宣称,Windows 11 上 安卓子系统运行 Android  应用程序的第一个预览版现已提供给美国 Beta 频道的 Windows 内部人员.但现在通过教程 ...

  9. 万里阳光号Srcum Metting博客汇总

    Srcum Meeting 一.Alpha阶段 第一次Scrum Meeting 第二次Scrum Meeting 第三次Scrum Meeting 第四次Scrum Meeting 第五次Scrum ...

  10. js基础学习之"=="与"==="的区别

    var a = 1; var b = 1; var c = "1"; 1. "==" 可理解为相等运算符.相等运算符比较时,会自己进行类型转换,等于什么类型就会 ...