精华内容
下载资源
问答
  • 入门单片机stm32f4时老师给的资源,注释什么的都比较明确,适合新手学习
  • 利用单片机定时器1产生周期为20ms的方波.P1.1输出
  • 开始调试方波控制步进电机时,定时器初始化完成后: void TIM1_PWM_Init(u16 arr,u16 psc) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_...

    开始调试方波控制步进电机时,定时器初始化完成后:

    void TIM1_PWM_Init(u16 arr,u16 psc)
    {  
    GPIO_InitTypeDef         GPIO_InitStructure;
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    TIM_OCInitTypeDef        TIM_OCInitStructure;


    RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);         //ʹÄÜTIMxʱÖÓ 
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);        //ʹÄÜGPIOÍâÉèʱÖÓ
                                                                       
      //ÉèÖøÃÒý½ÅΪ¸´ÓÃÊä³ö¹¦ÄÜ,Êä³öTIM1 CH1µÄPWMÂö³å²¨ÐÎ
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;                    //TIM_CH1
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;              //¸´ÓÃÍÆÍìÊä³ö
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);                       //³õʼ»¯Òý½Å


    TIM_TimeBaseStructure.TIM_Period = arr;                      //ÉèÖÃÔÚÏÂÒ»¸ö¸üÐÂʼþ×°Èë»î¶¯µÄ×Ô¶¯ÖØ×°ÔؼĴæÆ÷ÖÜÆÚµÄÖµ 80K
    TIM_TimeBaseStructure.TIM_Prescaler =psc;                    //ÉèÖÃÓÃÀ´×÷ΪTIMxʱÖÓƵÂʳýÊýµÄÔ¤·ÖƵֵ  ²»·ÖƵ
    TIM_TimeBaseStructure.TIM_ClockDivision = 0;                 //ÉèÖÃʱÖÓ·Ö¸î:TDTS = Tck_tim
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIMÏòÉϼÆÊýģʽ
    TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);              //¸ù¾ÝTIM_TimeBaseInitStructÖÐÖ¸¶¨µÄ²ÎÊý³õʼ»¯TIMxµÄʱ¼ä»ùÊýµ¥Î»


    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;             //Ñ¡Ôñ¶¨Ê±Æ÷ģʽ:TIMÂö³å¿í¶Èµ÷ÖÆģʽ2
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //±È½ÏÊä³öʹÄÜ
    TIM_OCInitStructure.TIM_Pulse = 0;                            //ÉèÖôý×°È벶»ñ±È½Ï¼Ä´æÆ÷µÄÂö³åÖµ
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;     //Êä³ö¼«ÐÔ:TIMÊä³ö±È½Ï¼«ÐÔ¸ß
    TIM_OC1Init(TIM1, &TIM_OCInitStructure);                      //¸ù¾ÝTIM_OCInitStructÖÐÖ¸¶¨µÄ²ÎÊý³õʼ»¯ÍâÉèTIMx


      TIM_CtrlPWMOutputs(TIM1,ENABLE);                            //MOE Ö÷Êä³öʹÄÜ


    TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);             //CH1ԤװÔØʹÄÜ  

    TIM_ARRPreloadConfig(TIM1, ENABLE);                           //ʹÄÜTIMxÔÚARRÉϵÄԤװÔؼĴæÆ÷

    TIM_Cmd(TIM1, ENABLE);                                        //ʹÄÜTIM1 
    }

    改变频率用的是函数:

    void SetTIM_fr(u32 fr,TIM_TypeDef* TIMx)   //µ¥Î»Hz
    {
    u16 arr,psc;
    psc = (u16)(72000000/10000/fr+1+0.5); 
    arr = (u16)(72000000/psc/fr+0.5);
    TIMx->ARR = arr-1;    //×Ô¶¯ÖØ×°Öµ
    TIMx->PSC = psc-1;    //ʱÖÓÔ¤·ÖƵÊý
    TIMx->CCR1 = arr/2;   //Õ¼¿Õ±È
     printf("fr=%d \r\n",fr);
    printf("arr=%d   psc=%d  CCR1=%d \r\n",arr,psc,arr/2);
    }

    在好长一段时间内系统运行都没有问题

    可是前段时间发现个比较奇怪的问题:在设置为小频率后,再设置大频率输出时,被设置的大频率不会立刻输出,而是延时一会输出。

     

    最后解决的办法是:

    void SetTIM_fr(u32 fr,TIM_TypeDef* TIMx)   //µ¥Î»Hz
    {
    u16 arr,psc;
    up_fr = fr;
    // if(fr<750) fr=750;
    psc = (u16)(72000000/10000/fr+1+0.5); 
    arr = (u16)(72000000/psc/fr+0.5);
    TIMx->ARR = arr-1;    //×Ô¶¯ÖØ×°Öµ
    TIMx->PSC = psc-1;    //ʱÖÓÔ¤·ÖƵÊý
    TIMx->CCR1 = arr/2;   //Õ¼¿Õ±È
    TIMx->EGR = TIM_PSCReloadMode_Immediate;     //

    }

    然后不要一直操作  TIM_Cmd(TIMx, ENABLE);

    定时器打开后就不要开启和关闭来回操作

     

     

    展开全文
  • 单片机实验-利用定时器产生方波

    千次阅读 2017-12-10 22:14:52
    ORG 0000H LJMP MAIN ORG 0003H LJMP TOINT ORG 001BH LJMP TOINT1 ORG 0030H MAIN: MOV SP,#60H SETB IT0 SETB EX0 SETB EA SJMP $ TOINT:MOV TMOD,#10H MOV TH1,#0FEH MOV TL1
    ORG 0000H
    LJMP MAIN
    ORG 0003H
    LJMP TOINT
    ORG 001BH
    LJMP TOINT1
    ORG 0030H
    MAIN: MOV SP,#60H
          SETB IT0
          SETB EX0
          SETB EA
          SJMP $
    TOINT:MOV TMOD,#10H
          MOV TH1,#0FEH
          MOV TL1,#0CH
          SETB ET1
          SETB TR1
          RETI
    TOINT1:MOV TH1,#0FEH
           MOV TL1,#0CH
           CPL P1.0
           RETI
           END

    这里写图片描述

    这里写图片描述

    展开全文
  • 定时器是单片机最重要的一个功能,一开始学的时候遇到了不少的问题,通过不断地学习解决了不少问题,其实学会之后也没有什么。在这里我整理了一下定时器的使用,就用51单片机来举例。像别的STC15等系列的单片机其实...

    如果有朋友对定时器还不太了解,可以看一下这篇文章
    链接: 《单片机定时器总结》—用最简洁的方式学会51单片机定时器。.

    任务要求

    • 😀采用T0定时器方式2在P1.0口输出周期为0.5ms的方波。

    Proteus仿真图

    在这里插入图片描述
    方波的实现
    在这里插入图片描述

    程序代码

    #include"reg51.h"
    void Timer0Init(void);
    unsigned int tt;
    sbit Fangbo=P1^0;
    void main()
    {
    	Timer0Init();
    	while(1);
    	
    }
    
    void Timer0Init(void)		//设置1us定时一次
    {
    
    	TMOD=0x02;		//设置定时器模式
    	TL0 = 0xFF;		//设置定时初值
    	TH0 = 0xFF;		//设置定时重载值
    	TF0 = 0;		//清除TF0标志
    	TR0 = 1;		//定时器0开始计时
    	EA=1;
    	ET0=1;
    }
    void Time0() interrupt 1
    {
    	tt++;
    	if(tt==250)//每当经过250us,P1^0电平翻转一次。
    	{
    		tt=0;
    		Fangbo=~Fangbo;
    	}
    }
    		
    
    展开全文
  • STM32利用定时器1的通道1输出PWM注:本程序基于正点原子的第33讲PWM输出pwm.h文件下的代码:#ifndef __PWM_H #define __PWM_H #include "sys.h" void TIM1_PWM_Init(u16 arr,u16 psc); #endif pwm.c文件下的...

    STM32利用定时器1的通道1输出PWM波

    注:本程序基于正点原子的第33讲PWM输出

    0cf6d81cc59a1f92c4f33b3f7acad0dd.png

    38a9ca1a6ec401856a04bb14bf5f46e1.png

    pwm.h文件下的代码:

    #ifndef __PWM_H
    #define __PWM_H
    #include "sys.h"
    
    void TIM1_PWM_Init(u16 arr,u16 psc);
    
    
    
    #endif
    

    pwm.c文件下的代码:

    #include 

    过程中遇到的问题:

    这句话//TIM_ForcedOC1Config(TIM1,TIM_ForcedAction_Active);不能有,有这句软件仿真结果就一直是高电平。

    使用此函数:TIM_ForcedOC1Config(TIM1, TIM_ForcedAction_InActive);可以将定时器端口强制置为低电平,但是PWM开启时使用TIM_ForcedOC1Config(TIM12, TIM_ForcedAction_Active);PWM就无效了。

    主函数main.c的代码:

    #include 

    软件仿真

    aabea1447e585318915fc1a89ae70827.png

    076cc2bc3e30e0a6e1c798c53c5c8d75.png

    c7609543cb7322264b71d6b776062069.png

    4152c7e4909d82d95ba6745b6b58ec8f.png

    1fb34ba30941fd62486892d9b5bb05a2.png

    443c0f2501d643db17dc41ab9a91353f.png

    d9144deb613cb715c4278194dc60cbb7.png

    这里要选择:周期性刷新逻辑分析仪屏幕,才能显示波形

    428058c880068c89344aa9efbe361f30.png

    c82d90f052197c2574515557d530829a.png

    3f3148a0f5852ebb90b8726a6a19dce2.png

    观察得到是1MHz的方波

    频率的计算:

    ba53473729b196f533b96a77e05342f7.png

    频率设置的相关参数:

    (1)TIM_TimeBaseStructure.TIM_Period ====== ARR

    (2)TIM_TimeBaseStructure.TIM_Prescaler ======PSC

    (3)TIM_OCInitStructure.TIM_Pulse ====== (ARR+1)/2 ------>占空比为50%

    这里TIM_Pulse是设置占空比的

    这里:(ARR+1)*(PSC+1) = 72MHz/1MHz =72000000/1000000 =72

    (ARR+1)(PSC+1) = 72 = 8*9 → ARR = 7 , PSC = 8,

    设置占空比为50%,则TIM_Pulse=(ARR+1)/2 = (7+1)/2 = 4

    展开全文
  • 利用定时器在单片机P1口输出1Mhz方波
  • 51定时器产生方波

    2015-12-18 14:39:23
    利用STC89c51的定时器0来产生方波输出。其中方波可以自己设置
  • 通过定时器输出矩形

    千次阅读 2019-10-20 16:28:41
    通过定时器输出矩形波形 练习1: 用定时/计数器 T0 输出引脚 P1.4 延时30ms 完成50个频率为1KZ的矩形脉冲输出(用中断) 解析:矩形脉冲频率为1KZ,周期则为1ms, 中断为0.5ms, 所以T0: TH0=(65536-500)/256, ...
  • STM32 定时器 输出40KHZ PWM方波

    千次阅读 2018-10-20 18:24:38
    言归正传,最近做了一个DIY超声波的小项目,想利用STM32定时器直接输出40KHZ的方波,不过却遇到了一些小的疑惑。 由定时器频率计算公式可知,在72MHZ频率下,设置arr为39,psc为44,即可输出40KHZ的方波,但是我将...
  • 定时器实现方波

    2021-03-23 10:59:30
    假设单片机的晶振频率为12MHz,使用T1,在方式1下控制P1.0输出1ms的等宽方波信号。 二、布线 三、实现 时间常数TC=65536-12000000*0.001/12=65536-1000。 sbit K=P1^0; void init_T1() interrupt 3 { TH1=(65536-...
  • 方波 方波的占空比固定是50%,即高电平和低电平的时间为1:1; 方波的周期:从一个上升沿(下降沿)到下一个上升沿(下降沿)的时间; 由此可得知周期为1s的方波就是高电平占0.5s,低电平占0.5s的波形; 单片机...
  • 利用555定时器实现38KHZ方波输出

    万次阅读 热门讨论 2010-05-16 12:26:00
    我们这里选用NE555定时器芯片.相应的电路图如下图: 对于上图,要求我们自己确定参数R1、R2和C1。计算时有输出高电平时间为: t1 = 0.693 (R1 +R2) C1 输出低电平的时间是: t2 = 0.693 (R2) C1 所以周期为: T = t1 ...
  • 555定时器做一个频率为1Hz的秒脉冲发生器 原理就是直流电震荡后升压,比如说1个小功率电棍,利用6V-12V直流电源可产生一种高压脉冲。电路中三极管Q1、Q2构成了一振荡器,产生频率为3Hz的直流脉冲电压,并输入变压器...
  • 利用Proteus软件画出电路图,单片机定时器/计数器以查询方式工作,在P1.0口产生周期为100us的连续方波,在P1.0口线上接上示波器观察波形。 前言:写这篇博客的意义在于,借助本实验可以复习定时器中断的使用以及...
  • 最近有一个项目,需要利用单片机给出一个频率和振幅可调的方波信号,利用学过的知识,用简单的方法实现了这一要求,下面是具体步骤。
  • 电路中三极管Q1、Q2构成了一振荡器,产生频率为3Hz的直流脉冲电压,并输入变压器比为6V:240V升压器的初级线圈,在每个脉冲结束时,相应地在变压器的次级线圈产生一高电压。脉冲的重复频率可通过选择C2、R1值进行...
  • STM32定时器使用(二)PWM方波输出

    千次阅读 2019-10-17 19:42:22
    之前使用过的DSP28335是有专门的ePWM和捕捉功能的,不过定时器很少,其实是一样的道理,通用定时器也可以进行PWM方波输出,使用过程可以按照下面来执行 本例程使用TIM3定时器,过程是先配置输出引脚,每个定时器有...
  • STM32CUBEMX配置教程(五)高级定时器输出两路PWM 基于STM32H743VI 使用STM32CUBEMX两年了,始终觉得这个工具非常的方便,但因为不是经常使用,导致有些要点总是会有些遗忘,因此写下这一系列教程以供记忆,顺便让...
  • 并由P1.7周期性的输出高电平40ms、低电平360ms的矩形。;分析:可采用中断方式,定时40ms发生一次中断,利用R7记录中断次数,仅当R7=0的时候,输出高电平。;============================================ ORG ...
  • #include<reg51.h> // 包含51单片机寄存器定义的头文件 ... //使用定时器T1的模式1 TH1=(65536-921)/256; //定时器T1的高8位赋初值 TL1=(65536-921)%256; //定时器T1的高8位赋初值TR1=1; //开启定时 TF
  • 在STM32F103单片机上,利用定时器比较输出模式,来输出相位可变方波。通过定时器3的通道1到通道4 。输出4路不同相位方波
  • 51单片机输出方波问题

    千次阅读 多人点赞 2020-03-06 12:06:03
    今天分享一个题目,有关51单片机输出方波的问题,好了,进入正题 二:题目 已知8051单片机的时钟频率为6MHZ,通过定时器1的工作方式1在P1^1引脚输出一个1KHZ占空比为60%的矩形波。 三:分析题目 1、首先第一个条件,...
  • C51使用定时器中断产生PWM方波信号

    千次阅读 2020-05-06 09:29:16
      使用定时器中断产生PWM方波信号,完成50个频率为1KZ的矩形脉冲输出,P20端口接LED闪烁,用于演示。   矩形脉冲频率为1KZ,周期则为1ms, 中断为0.5ms, 所以T0: TH0=(65536-500)/256, TL0=(65536-500)%256。 ...
  • 80C51单片机的时钟频率为12MHz,利用定时器T1和P1.0输出矩形脉冲。波形只画出了2段:一段为100us 另一段为50us。要完全的、完整的、详细的编写此程序的过程!谢谢悬赏分:5 | 解决时间:2011-1-9 15:24-------------...
  • 目录一、PWM简介二、STM32F1 PWM介绍三、PWM输出配置步骤 一、PWM简介 PWM是 Pulse Width Modulation 的缩写,中文意思就是脉冲宽度调 制,简称脉宽调制。它是利用微处理器的数字输出来对模拟电路进行控 制的一种...
  • 89C51单片机控制定时器0、1分别输出5kHz和2.5kHz的方波 1.proteus仿真图 2.keli代码 #include <reg51.h> sbit sig1=P1^0; sbit sig2=P1^1; //定时器中断0控制程序 void Time0test() interrupt 1 { sig1=~...
  • #include<reg52.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int sbit PLUSE=P2^4; void main() ...//0000 0011 定时器0工作方式3 TH0=(65536-50000)/256;// ...
  • C8051F020用定时器3以中断方式产生方波脉冲

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,675
精华内容 1,070
热门标签
关键字:

利用定时器输出方波