我是靠谱客的博主 坚定大雁,最近开发中收集的这篇文章主要介绍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 初始化 代码所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复