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

一、

1、完整工程下载链接

复制代码
1
2
3
https://download.csdn.net/download/qcddao4/14801288 没积分的关注收藏私信要一下。感谢。

二、硬件

复制代码
1
2
基于原子的精英板,单片机型号stm32f103zet6.

三、实现的功能

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

四、效果

1、功能 3 效果

在这里插入图片描述

2、功能 4 效果

在这里插入图片描述

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

1、主函数

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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初始化

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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内容请搜索靠谱客的其他文章。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部