stm32f103zet6高级,通用,基本定时器功能汇总:1普通定时,2输入捕获,3输出比较,4PWM,5单脉冲模式输出,6标...

2019-07-21 02:22发布

本帖最后由 nashui_sx 于 2019-7-15 09:06 编辑

修正一个错误,输出比较的时候,两个定时器共用CH1_Flag造成干扰,前面分别加上定时器标记 TIM1_CH1_Flag,别的还未发现错误,已经重新上传
//每个功能都在stm32f103zet6上测试通过
// 1普通定时               2输入捕获                     3输出比较                          4PWM                5单脉冲输出
//TIMx_Time_Init   TIMx_InputCapture_Init   TIMx_OutputCompare_Init    TIMx_Pwm_Init   TIMx_OnePulseOutput_Init
//基本定时器TIM6,7只有1定时的功能,剩余的4个功能分别用高级TIM1 通用TIM2进行测试,便于大家移植
在time.h 中切换功能
#define  TIMx_Time_Init_Test                  0
#define  TIMx_InputCapture_Init_Test       0
#define  TIMx_OutputCompare_Init_Test   0
#define  TIMx_Pwm_Init_Test                 0
#define  TIMx_OnePulseOutput_Init_Test  0
定时器5种模式实验.rar (314.4 KB, 下载次数: 1166) 4 天前 上传 点击文件名下载附件 具体细节参考程序内部说明
例如输出比较可以产生特殊波形
QQ截图20190715083707.jpg
增加两个定时器功能:6标志量触发单脉冲输出             7定时器主从模式产生准确脉冲个数
添加2功能 定时器5种模式实验.rar (315.12 KB, 下载次数: 1104) 4 天前 上传 点击文件名下载附件
1普通定时    : 基本定时
2输入捕获   :一个通道捕获高电平,测量占空比,一个通道测量两个上升沿间隔测量周期
3输出比较   :一个定时器可以产生4中周期不同占空比的pwm,还可以翻转任意io实现任意引脚输出pwm
                  (还可以实现一个定时器实现4种基本定时,大家自己扩展吧)                 
4PWM        :一个定时器产生一种周期的4种占空比pwm
5单脉冲输出:通道2检测到上升沿后,通道1延时设定时间后输出一个设定时间的高电平脉冲

6标志量触发单脉冲输出            
7定时器主从模式产生准确脉冲个数
8 TIM计数模式c8t6做的 TIM 计数模式.rar (3.28 MB, 下载次数: 675) 2017-12-5 20:12 上传 点击文件名下载附件   TIM1在43楼
单脉冲输出的现象:
1.png



























友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
49条回答
Chongki
1楼-- · 2019-07-27 07:56
 精彩回答 2  元偷偷看……
Chongki
2楼-- · 2019-07-27 08:48
nashui_sx 发表于 2018-12-19 22:51
不好意思,估计发的早没有,新的复制给你了
[mw_shl_code=applescript,true]#include "tim_count.h"
//计 ...

试了一下,似乎是板子的问题,换了一块可以了
tmc159
3楼-- · 2019-07-27 13:45
 精彩回答 2  元偷偷看……
tmc159
4楼-- · 2019-07-27 17:48
tmc159 发表于 2019-4-2 17:33
大神 本人小白一枚 用了你写的这个脉冲计数, 我想让计数到10000的时候开始重新计数 在最后get_maichong  ...

         if(count == 10000)
         {
                 Update_Flag=0;
                 TIM_SetCounter(TIM2, 0);
   }
这个是添加的代码
nashui_sx
5楼-- · 2019-07-27 23:16
tmc159 发表于 2019-4-2 17:33
大神 本人小白一枚 用了你写的这个脉冲计数, 我想让计数到10000的时候开始重新计数 在最后get_maichong  ...

为啥用清零记住上次的,这次的减去上次的不就是变化量了
真要10000重新计数 你把Update_TIM_Period 改成10000 就是计数10000次进中断了
删除Update_Flag++;//标记溢出次数  不需要溢出处理了反正10000就清零
Get_MaiChong
改为
u32 Get_MaiChong(void)
{
         return TIM_GetCounter(TIM2);
}
tmc159
6楼-- · 2019-07-28 03:41
nashui_sx 发表于 2019-4-2 18:22
为啥用清零记住上次的,这次的减去上次的不就是变化量了
真要10000重新计数 你把Update_TIM_Period 改成 ...

哦哦 谢谢 大神帮助

一周热门 更多>