stm32舵机驱动程序分享

stm32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的arm cortex-m3内核。按内核架构分为不同产品:
其中stm32f系列有:
stm32f103“增强型”系列
stm32f101“基本型”系列
stm32f105、stm32f107“互联型”系列 增强型系列时钟频率达到72mhz,是同类产品中性能最高的产品;基本型时钟频率为36mhz,以16位产品的价格得到比16位产品大幅提升的性能,是32位产品用户的最佳选择。两个系列都内置32k到128k的闪存,不同的是sram的最大容量和外设接口的组合。时钟频率72mhz时,从闪存执行代码,stm32功耗36ma,相当于0.5ma/mhz。
在stm32f105和stm32f107互连型系列微控制器之前,意法半导体已经推出stm32基本型系列、增强型系列、usb基本型系列、互补型系列;新系列产品沿用增强型系列的72mhz处理频率。内存包括64kb到256kb闪存和 20kb到64kb嵌入式sram。新系列采用lqfp64、lqfp100和lfbga100三种封装,不同的封装保持引脚排列一致性,结合stm32平台的设计理念,开发人员通过选择产品可重新优化功能、存储器、性能和引脚数量,以最小的硬件变化来满足个性化的应用需求。
stm32f103 舵机控制程序 #include “timer.h”
//tim2 pwm部分初始化
//pwm输出初始化
//arr:自动重装值
//psc:时钟预分频数
void tim2_pwm_init(u16 arr,u16 psc)
{
gpio_inittypedef gpio_initstructure;
tim_timebaseinittypedef tim_timebasestructure;
tim_ocinittypedef tim_ocinitstructure;
rcc_apb1periphclockcmd(rcc_apb1periph_tim2, enable); //使能定时器2时钟
rcc_apb2periphclockcmd(rcc_apb2periph_gpioa | rcc_apb2periph_afio, enable); //使能gpio外设和afio复用功能模块时钟
gpio_pinremapconfig(gpio_partialremap2_tim2, enable); //timer3部分重映射 tim2_ch2-》pa1
//设置该引脚为复用输出功能,输出tim2 ch2的pwm脉冲波形 gpioa.1
gpio_initstructure.gpio_pin = gpio_pin_1; //tim_ch2
gpio_initstructure.gpio_mode = gpio_mode_af_pp; //复用推挽输出
gpio_initstructure.gpio_speed = gpio_speed_50mhz;
gpio_init(gpioa, &gpio_initstructure);//初始化gpioa
//初始化tim2
tim_timebasestructure.tim_period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
tim_timebasestructure.tim_prescaler =psc; //设置用来作为timx时钟频率除数的预分频值
tim_timebasestructure.tim_clockdivision = 0; //设置时钟分割:tdts = tck_tim
tim_timebasestructure.tim_countermode = tim_countermode_up; //tim向上计数模式
tim_timebaseinit(tim2, &tim_timebasestructure); //根据tim_timebaseinitstruct中指定的参数初始化timx的时间基数单位
//初始化tim2 channel2 pwm模式
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_oc2init(tim2, &tim_ocinitstructure); //根据t指定的参数初始化外设tim2 oc2
tim_oc2preloadconfig(tim2, tim_ocpreload_enable); //使能tim2在ccr2上的预装载寄存器
tim_arrpreloadconfig(tim2, enable); //使能timx在arr上的预装载寄存器
tim_cmd(tim2, enable); //使能tim2
}
#ifndef __timer_h
#define __timer_h
#include “sys.h”
void tim2_pwm_init(u16 arr,u16 psc);
#endif
#include “delay.h”
#include “timer.h”
/*舵机控制周期限制在20ms,脉宽部分为0.5ms--2.5ms
0.5ms对应0度
1ms对应45度
1.5ms对应90度
2ms对应135度
2.5ms对应180度
*/
int main(void)
{
u16 pwmval=0;
delay_init(); //延时函数初始化
tim2_pwm_init(1999,719); //不分频pwm频率=100000/2000=50hz
while(1)
{
pwmval=1850;
tim_setcompare2(tim2,pwmval);
}
}

AVM全视监测系统方案介绍
电子电路维修之电阻器介绍
RFID标签的封装形式有哪些形式
西门子工控机的常见故障有哪些
TMC2130-TA步进电机驱动芯片
stm32舵机驱动程序分享
科技新宠区块链+物联网或将是一个新物种
详细介绍量子计算的现状与未来概述
国产彩虹4无人机首实战:巷战掌控者
有谱!极狐想清楚了两件大事
芯片设计和制造哪个更难
简单解释一下CMAF
网卡小百科知识
我国汽车芯片自主率不足10%,迫切需要实现自主安全可控
关于罗德与施瓦茨的宽带功率放大器的性能分析和应用
RISC-V新进展!deepin 成功适配VisionFive 2
C语言中for循环的用法和应用 C语言中for循环与while循环的区别
防爆电容器串联电抗器的作用
新能源发展障碍:充电自燃真正的危害是殃及池鱼
智能型叶绿素传感器