我是靠谱客的博主 坚定大雁,最近开发中收集的这篇文章主要介绍stm32zet6_pwm输出_外部脉冲计数pwm脉冲个数一、二、硬件三、实现的功能四、效果五、主函数和pwm 初始化 代码,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、

1、完整工程下载链接

			https://download.csdn.net/download/qcddao4/14801288
		    没积分的关注收藏私信要一下。感谢。

二、硬件

基于原子的精英板,单片机型号stm32f103zet6.

三、实现的功能

1、TIM1 输出pwm.频率为 1 K 。引脚用PA11。
2、TIM3 配置为外部时钟输入模式。引脚用PD2。使能中断。
3、将PD2 和 PA11 短接,主函数串口打印 pwm脉冲个数。
4、控制TIM1 pwm 输出 4个周期后 停止输出。

四、效果

1、功能 3 效果

在这里插入图片描述

2、功能 4 效果

在这里插入图片描述

五、主函数和pwm 初始化 代码

1、主函数

 int main(void)
 {		
 	u16 t;  
	u16 len;	
	delay_init();	    	 //延时函数初始化	  
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
	uart_init(115200);	 //串口初始化为115200
 	LED_Init();			     //LED端口初始化
	KEY_Init();          //初始化与按键连接的硬件接口
	 
	TIM1_PWM_Init(100);  //不要传奇数   50  周期是500us   100 周期是1ms 
	TIM3_Init() ;     //配置 TIM2_CH1_ETR 为外部脉冲计数  并且使能中断  来一个上升沿进一次中断 
	 
 	while(1)
	{
		if(USART_RX_STA&0x8000)
		{					   
			len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
			printf("rn您发送的消息为:rnrn");
			for(t=0;t<len;t++)
			{
				USART_SendData(USART1, USART_RX_BUF[t]);//向串口1发送数据
				while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
			}
			printf("rnrn");//插入换行
			USART_RX_STA=0;
		}else
		{
		}
		
		delay_ms(200);
		printf("pwm脉冲个数%d rn",TIM_GetCounter(TIM3));
	}	 
 }

2、pwm初始化

void TIM1_PWM_Init(u16 arr )
{
		GPIO_InitTypeDef GPIO_InitStructure;
		TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; 
		TIM_OCInitTypeDef TIM_OCInitStructure; 

		RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
		RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);   

		GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11 ; //|GPIO_Pin_8;    //11是ch4  8 是ch1
		GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
		GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; //复用推挽输出   //
		GPIO_Init(GPIOA,&GPIO_InitStructure);

		TIM_TimeBaseInitStructure.TIM_Period = arr; //设置自动重装载寄存器周期的值
	    TIM_TimeBaseInitStructure.TIM_Prescaler = 719;//设置用来作为TIMx时钟频率预分频值 7199:10k
		TIM_TimeBaseInitStructure.TIM_ClockDivision = 0;//设置时钟分割:TDTS = Tck_tim
		TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;//TIM向上计数模式
		TIM_TimeBaseInit(TIM1, & TIM_TimeBaseInitStructure);
	
		TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;
		TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
		TIM_OCInitStructure.TIM_Pulse=arr/2;
		TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;
		TIM_OCInitStructure.TIM_OCIdleState=TIM_OCIdleState_Set;
		TIM_OC4Init(TIM1,&TIM_OCInitStructure);

		TIM_OC4PreloadConfig(TIM1, TIM_OCPreload_Enable);
		TIM_Cmd(TIM1,ENABLE);//ê1?ü?ò??ê§?üTIMxíaéè

		//下面这句是高级定时器才有,输出PWM必须打开
		TIM_CtrlPWMOutputs(TIM1, ENABLE);                             //pwm输出

}

最后

以上就是坚定大雁为你收集整理的stm32zet6_pwm输出_外部脉冲计数pwm脉冲个数一、二、硬件三、实现的功能四、效果五、主函数和pwm 初始化 代码的全部内容,希望文章能够帮你解决stm32zet6_pwm输出_外部脉冲计数pwm脉冲个数一、二、硬件三、实现的功能四、效果五、主函数和pwm 初始化 代码所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(70)

评论列表共有 0 条评论

立即
投稿
返回
顶部