#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>int DTG[8]={0,0,0,0,0,0,0,0};
///是十进制转二进制
int dectobin(int n)
{int sum = 0;int y, x = 1; // y表示余数,x为叠加的系数while (n != 0){y = n % 2;sum += x * y;x *= 10;n /= 2;}return sum;
}
int main()
{double TDTS;double Tdtg1,Tdtg2,Tdtg3,Tdtg4;char str[100];double time;unsigned int frequency;bzero(str,sizeof(str));printf("1s = 1000ms \t 1ms = 1000us \t 1us = 1000ns\n");printf("输入定时器频率(MHZ)\n");scanf("%d",&frequency);TDTS = (1*1000.0*1000.0*1000.0)/(frequency*1000000.0);printf("TDTS: %0.2lf  ns\n",TDTS);sprintf(str,"%0.2lf",TDTS);    Tdtg1 = atof(str);printf("Tdtg1:%0.2lf\n",Tdtg1);printf("----------------第一种-------------\n");double DT1;///持续时间printf("tTdtg: %lf  ns\n",Tdtg1);printf("DTG[7:5]= 0xx => DT=DTG[6:0] × Tdtg1,Tdtg1 = TDTS\n");printf("Tdtg1: %0.2lf  ns\n",Tdtg1);DT1 = (pow(2,7)-1)*Tdtg1;printf("0--(2^(7)-1)*Tdtg1 :\n DT1 = 0ns ~~~~~%0.2lf ns\n",DT1);printf("----------------第二种-------------\n");double DT2_0,DT2_1;///持续时间Tdtg2 = atof(str)*2;printf("Tdtg2 = TDTS*2: %0.2lf ns\n",Tdtg2);printf("DTG[7:5]=10x => DT=(64+DTG[5:0])Tdtg2 , Tdtg2 = 2×TDTS\n");DT2_0 = 64*Tdtg2;DT2_1 = (64+(pow(2,6)-1))*Tdtg2;printf("(64 + 0 ~ 64 + 2 ^ 6 - 1)*2* Tdtg2:\n DT2 =%0.2lf ns~~~%0.2lf ns\n",DT2_0,DT2_1);printf("----------------第三种-------------\n");double DT3_0,DT3_1;///持续时间Tdtg3 = atof(str)*8;printf("Tdtg3 = TDTS*8: %0.2lf ns\n",Tdtg3);DT3_0 = 32*Tdtg3;DT3_1 = (32+(pow(2,5)-1))*Tdtg3;printf("DTG[7:5]=110 => DT=(32+DTG[4:0]) × Tdtg3,Tdtg3 = 8 × TDTS\n");printf("(32 + 0 ~ 32 + 2 ^ 5 - 1)*2* Tdtg3:\n DT3 =%0.2lf ns~~~%0.2lf ns\n",DT3_0,DT3_1);printf("----------------第四种-------------\n");double DT4_0,DT4_1;///持续时间Tdtg4 = atof(str)*16;printf("Tdtg4 = TDTS*16: %0.2lf ns\n",Tdtg4);DT4_0 = 32*Tdtg4;DT4_1 = (32+(pow(2,5)-1))*Tdtg4;printf("DTG[7:5]=110 =16> DT=(32+DTG[4:0]) × Tdtg4,Tdtg4 = 8 × TDTS\n");printf("(32+0~32+ 2^4 - 1)*2* Tdtg4: \n DT4 =%0.2lf ns~~~%0.2lf ns\n",DT4_0,DT4_1);printf("输入你需要死区时间(ns)--尽量选在区域内的范围的死区时间\n");scanf("%lf",&time);double ret = 0;int result = 0;if(time ==DT1 || time < DT1){DTG[7]=0;printf("属于第一情况:最高永远为 0 \n");printf("DT1:%0.2lf\n",Tdtg1);ret =  time / Tdtg1+0.5; 四舍五入printf("time / Tdtg1 =%0.0lf\n",ret);result = dectobin(ret);printf("位数不够7位时,在给寄存器赋值时要自已在前面手动补0----DTG[6:0]\n");printf("DTG[6:0]:%d\n",result);printf("DTG[7:0]:0b0 %d\n",result);return 0;}if((time >DT2_0 && time < DT2_1) || time == DT2_0 || time == DT2_1){DTG[0]=1;DTG[1]=1;printf("属于第二情况:DTG[7:6]永远为 10 \n");printf("DT1:%0.2lf\n",Tdtg2);ret =  time / Tdtg2 - 64+0.5;    四舍五入printf("time / Tdtg2 =%0.0lf\n",ret);result =dectobin(ret);printf("位数不够6位时,在给寄存器赋值时要自已在前面手动补0----DTG[5:0]\n");printf("DTG[5:0]:%d\n",result);    printf("DTG[7:0]:0b10 %d\n",result);return 0;}if((time >DT3_0 && time < DT3_1 )|| time == DT3_0 || time == DT3_1){DTG[0]=1;DTG[1]=1;DTG[2]=0;printf("属于第三情况:DTG[7:5]永远为 110 \n");printf("DT1:%0.2lf\n",Tdtg3);ret =  time / Tdtg3 - 32+0.5;    四舍五入printf("time / Tdtg3 =%0.0lf\n",ret);result =dectobin(ret);printf("位数不够5位时,在给寄存器赋值时要自已在前面手动补0----DTG[4:0]\n");printf("DTG[4:0]:%d\n",result);   printf("DTG[7:0]:0b110 %d\n",result);return 0;}if((time >DT4_0 && time < DT4_1 )|| time == DT4_0 || time == DT4_1){DTG[0]=1;DTG[1]=1;DTG[2]=1;printf("属于第四情况:DTG[7:5]永远为 111 \n");printf("DT1:%0.2lf\n",Tdtg4);ret =  time / Tdtg4 - 32+0.5;    四舍五入printf("time / Tdtg4 =%0.0lf\n",ret);result =dectobin(ret);printf("位数不够5位时,在给寄存器赋值时要自已在前面手动补0----DTG[4:0]\n");printf("DTG[4:0]:%d\n",result);  printf("DTG[7:0]:0b110 %d\n",result);}return 0;
}

本次代码实现有些瑕疵,

例如第三种情况: 定时器频率:72Mhz 死区时间:5000ns


**

这里的DTG[4:0]应该是 01101;DTG[7:0]应该是0b110 01101;

有能力者可以帮我完善一下也行!哈哈哈!## 有错误请指出

**

STM32 高级定时TIM 死区时间计算--C语言实现相关推荐

  1. STM32———高级定时器的死区时间计算方法

    STM32---高级定时器的死区时间计算方法 1.定时器的时钟分频因子和预分频系数的区别: 1.1 时钟分频因子(Clock division),决定定时器的工作时钟频率. tDTS=fDTS ; t ...

  2. STM32 定时器 定时时间的计算

    假设 系统时钟是72Mhz,TIM1 是由PCLK2 (72MHz)得到,TIM2-7是由 PCLK1 得到 关键是设定 时钟预分频数,自动重装载寄存器周期的值 /*每1秒发生一次更新事件(进入中断服 ...

  3. STM32学习笔记(10)——高级定时器TIM

    前排提示:本笔记参考了野火PPT的大部分内容.本人初学定时器,倍感冗杂,有错烦请指出,谢谢! STM32学习笔记(10)--高级定时器TIM 一.时钟源 1. 内部时钟源 2. 外部时钟模式 1 (1 ...

  4. STM32 定时器【TIM】 定时如何计算?

    Stm32定时器定时计算通过计数溢出计算,也就是说计数溢出就触发中断 计算公式: TimeOut = ((Prescaler + 1) * (Period + 1) ) / TimeClockFren ...

  5. STM32 定时器定时计算

    STM32 定时器定时计算 STM32 定时器频率 例子 公式 reference STM32 定时器频率 定时时间 = 定时器频率 / 倍频 /装载周期 htim1.Init.Prescaler = ...

  6. c语言定时器1khz占空比,STM32高级定时器TIM1产生两路互补的PWM波(带死区)

    测试环境:Keil 5.20.0.0 STM32F103RBT6 固件库版本:STM32F10x_StdPeriph_Lib_V3.5.0(2011) 本文使用TIM1的通道1,通道2,产生两路1kh ...

  7. stm32高级定时器 基础知识

    stm32高级定时器 高级定时器时基单元: 包含一个16位自动重装载寄存器 ARR 一个16位的计数器CNT,可向上/下计数 一个16位可编程预分频器PSC,预分频器时钟源有多种可选,有内部的时钟.外 ...

  8. STM32 高级定时器周期、频率、占空比、对外输出电压详解

    STM32 高级定时器 最近在研究电机,对TIM定时器研究了一些,将一些存在疑惑的问题,通过试验和示波器分析,得到以下结论,供大家学习参考 1.介绍输出电压高低判断 输出比较时:OC1对外输出电压为示 ...

  9. STM32系统学习——TIM(基本定时器)

    一.定时器分类 STM32F1 系列中,除了互联型的产品,共有 8 个定时器,分为基本定时器,通用定时器和高级定时器.基本定时器 TIM6 和 TIM7 是一个 16 位的只能向上计数的定时器,只能定 ...

最新文章

  1. 猫头鹰的深夜翻译:你需要了解的数据库名词
  2. 在MATPLOTLIB中加入汉字显示
  3. DeeCamp 2020启动,邀请全球AI菁英共克世界变局下真实难题!
  4. python动态导入检查是否存在_python动态导入模块、检查模块是否安装
  5. 基于认证的代理平台搭建配置squid-20130730
  6. CodeForces - 1491E Fib-tree(模拟)
  7. 动手动脑-Java重载
  8. python函数-返回菲波那切数列for,range,append
  9. eigrp配置实验_EIGRP的认证的配置
  10. R语言中与矩阵相关的所有操作(上)
  11. 寻找春天 九宫格日记-2012.09.22
  12. 未来教育题库 ***Java二级试题第27套***
  13. 【牛客网】马三来刷题之回文解码(今日头条2017年客户端实习在线笔试题)
  14. Android相关问题的好文章整理——温故而知新,可以为师矣
  15. slideup_jQuery slideUp,slideDown,slideToggle
  16. 写给四十岁男人的忠告
  17. Unity_回合制战斗系统_01
  18. 玩客云刷上Armbian的体验
  19. 只需+1s,GitHub代码一键转成VS Code
  20. 【acwing】104. 货仓选址*(贪心|绝对值不等式)

热门文章

  1. MySQL数据库软件及SQL简介
  2. PS-twoday-移动工具
  3. 数据库常用操作语句总结
  4. Ubuntu 20.04 实现Windows 复制粘贴
  5. Cutting a Rod
  6. 想知道CAD怎么转图片格式?跟我学会这几招就足够了
  7. ios-弹窗输入六位密码
  8. 好看动漫+电影+电视剧分享
  9. python怎么退出全屏模式_notepad
  10. 树莓派2model B 通过蓝牙实现A2DP协议连接手机播放音乐