十二、STM32基于标准库的PWM输出及控制Servo180℃舵机转动
1.输出PWM代码(PA0-TimerCH1为例)
1.1 使能定时器和相关GPIO口的时钟
1 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE); 2 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
1.2 初始化IO口的功能
1 GPIO_InitTypeDef GPIO_InitStruct; 2 GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;//复用推挽输出模式 3 GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0; 4 GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; 5 GPIO_Init(GPIOA,&GPIO_InitStruct);
1.3 定时器初始化,设置自动装载值和分频系数,计算周期时间
1 TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct; 2 TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;//向上计数 3 TIM_TimeBaseInitStruct.TIM_Period=20000-1; 4 TIM_TimeBaseInitStruct.TIM_Prescaler=72-1;//20ms 5 TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1; 6 //TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0;//高级定时器使用 7 TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStruct);
1.4 初始化输出比较参数
1 TIM_OCInitTypeDef TIM_OCInitStruct; 2 TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1;//PWM模式,模式1 向上计数时:CNT < CCR1 则输出有效电平,否则输出无效电平 3 TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High;//比较输出极性,设置有效电平为高电平还是低电平 4 TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;//比较输出使能 5 TIM_OCInitStruct.TIM_Pulse = 0;//比较值,写CCRx,设置占空比(高电平/低电平)的比例 6 TIM_OC1Init(TIM2,&TIM_OCInitStruct);//CH1使用OC1
1.5 使能预装载寄存器
1 TIM_OC1PreloadConfig(TIM2,TIM_OCPreload_Enable);
1.6 使能自动重装载的预装载寄存器允许位,使比较寄存器ARR立即生效,否则下个比较周期生效
1 TIM_ARRPreloadConfig(TIM2,ENABLE);
1.7 使能定时器
1 TIM_Cmd(TIM2,ENABLE);
1.8 改变占空比
1 TIM_SetCompare1(TIM2,500);//0.5ms
2.180℃舵机知识
需要时间为20ms的时基,改变不同的占空比来改变转动的角度。
高电平时间 | 角度 | 占空比 |
0.5ms | 0 | 2.5 |
1ms | 45° | 5 |
1.5ms | 90° | 7.5 |
2ms | 135° | 10 |
2.5ms | 180° | 12.5 |
3.MDK5的模拟示波器观察端口输出波形
3.1 小扳手修改“Debug”的一些参数
3.2 打开调试界面,打开Logic Analyzer模拟示波器界面
3.4 点击setup设置要观察的端口,输入PORTA.0表示PA0端口,会自动转换为PORTA&0x00000001形式,显示类型选择Bit位
3.5 关闭设置界面,全速运行程序观察波形
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了