stm32控制舵机

发布者:幸福自由最新更新时间:2024-10-14 来源: cnblogs关键字:stm32  控制舵机  PWM波 手机看文章 扫描二维码
随时随地手机看文章

#include 'stm32f10x.h'

void GPIO_TimPWM(void)

{

 GPIO_InitTypeDef GPIO_InitStructure;

 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA  , ENABLE);//

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;         //TIM_CH2  GPIOA_Pin_7输出

 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出

 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

 GPIO_Init(GPIOA, &GPIO_InitStructure);        //不解释
}

void TIM3_Configuration(void)

{

 TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

 TIM_OCInitTypeDef  TIM_OCInitStructure;

 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);  //使能TIM3

 

//假如我要产生50Hz占空比为50%的PWM波,方便控制舵机

//设置方法:

//系统默认时钟为72MHz,预分频71+1次,得到TIM3计数时钟为1MHz
//计数长度为19999+1=20000,可得PWM频率为1M/20000=50Hz

//具体设置可参考上面的设置方法,简单明了!

 

 TIM_TimeBaseStructure.TIM_Prescaler = 72-1;//网上多数设置有误

 TIM_TimeBaseStructure.TIM_Period = 20000-1;    

 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;

                      //设置时钟分割:  TIM_CKD_DIV1 = 0,PWM波不延时(延时破坏占空比?待考证)

 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式

 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);  

 TIM_ARRPreloadConfig(TIM3, DISABLE);  //禁止ARR预装载缓冲器,也可以不用设置

 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2

 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能

 

 //占空比设置方法:

 //占空比=(TIM_Pulse+1)/(TIM_Pulse+1)-(TIM_Period+1)=10000/20000=0.5=50%

 

 TIM_OCInitStructure.TIM_Pulse = 10000-1;     

 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高

 TIM_OC2Init(TIM3, &TIM_OCInitStructure);  //根据TIM_OCInitStruct中指定的参数初始化外设TIMx

 TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);  //使能TIMx在CCR2上的预装载寄存器

 //上面两句中的OC2确定了是channle几,要是OC3则是channel 3  

 TIM_CtrlPWMOutputs(TIM3,ENABLE);   //设置TIM2的PWM输出为使能

 TIM_ARRPreloadConfig(TIM3, ENABLE); //使能TIMx在ARR上的预装载寄存器 

 TIM_Cmd(TIM3, ENABLE);  //使能TIMx外设

}

int main(void)

{

        GPIO_TimPWM(); 

        TIM3_Configuration();

  while(1)

  {   

  } ;

}

利用Keil逻辑分析仪分分析PWM波形图:经过测试可以看出输出波形精度可靠!


关键字:stm32  控制舵机  PWM波 引用地址:stm32控制舵机

上一篇:关于STM32的SPI的问题
下一篇:stm32 DMA 多通道数据采集

推荐阅读最新更新时间:2024-11-09 09:51

STM32串口蓝牙实验--蓝牙控制小灯
用的正点原子的串口模板 V3接线 效果,可以控制PB5开关 #include led.h #include delay.h #include key.h #include sys.h #include usart.h int main(void) { delay_init(); //延时函数初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 uart_init(9600); //串口初始化为115200 LED_Init(); //LED端口初始化 KE
[单片机]
<font color='red'>STM32</font>串口蓝牙实验--蓝牙<font color='red'>控制</font>小灯
应用笔记 | 浅谈STM32库里的回调函数
01 回调函数 有人对STM32固件库里的回调函数有些好奇甚至纠结,这里简单地介绍下,以供参考。其实从用法及功能上讲他们并没有什么特别的,跟其他函数一样,也是实现特定功能的代码段。一般来讲,所谓回调函数,泛指基于事件触发而被调用执行的函数,简单点说,就是条件满足了就调用的函数,往往会跟函数指针结合起来通过函数指针实现调用。 经常会有人基于类似下面的代码介绍回调函数: 在上面代码中,那四个有关加减乘除的函数可以看成回调函数,具体何时被调用,根据函数Compu te (float a,float b,float(* Ac ti on)(float a,float b))里的函数指针的赋值情况来定,被赋予哪个回调函数
[单片机]
应用笔记 | 浅谈<font color='red'>STM32</font>库里的回调函数
STM32学习总结之------串口通信USART
学习内容: 1、利用串口可以帮助我们调试程序,本节介绍的为串口最基本、最常用的方法,全双工、异步通讯方式。 2、要配置串口通讯,至少要设置以下几个参数:字长(一次传送的数据长度)、波特率(每秒传输的数据位数)、奇偶校验位、还有停止位。 在初始化串口的时候,必然有一个串口初始化结构体,这个结构体的几个成员就是有来存储这些控制参数的。 3、串口线主要分两种,直通线(平行线)和交叉线。 假如PC与板子之间要实现全双工串口通讯,必然是PC的Tx针脚要连接到板子的Rx针脚,而PC的Rx针脚则要连接至板子的Tx针脚了。由于板子和pc的串口接法是相同的,就要使用交叉线来连接了。 直通线接法:开发板Tx连接至DB9的第2针脚,而Rx连
[单片机]
<font color='red'>STM32</font>学习总结之------串口通信USART
stm32之SPI通信协议实例详解
  之前一直对SPI通信一知半解,所以想抽空把它搞得明白一些。考虑到之前是结合Flash芯片来学的,十分不直观,而且主要把时间和精力都花在Flash芯片的datasheet和驱动上了,SPI通信也没学好。所以这次就考虑用4位数码管显示模块,模块是直接买的现成的,这样可以简化操作,把精力聚焦到学习的核心–SPI通信本身上来。   本次采用的模块是用2片74HC595串联驱动的,一片用来控制数码管的位选(U1),一片用来控制数码管的段选(U2)。 接口比较简单,总共5个引脚,2个引脚分别接VCC和GND,DIO用来接收串行数据的输入,SCLK用来接收同步时钟,每个SCLK上升沿74HC595内部的移位寄存器会移一位,RCLK用
[单片机]
<font color='red'>stm32</font>之SPI通信协议实例详解
基于stm32的FSK调制解调器的设计
大致要求:设计一个FSK调制解调器,基带信号码速率为2000B/s,载波速率为4khz和8khz,解调信号要能完整还原基带信号。实现方法多种多样,通信领域内调制解调器的设计大多数用的都是硬件电路,鉴于笔者对编程情有独钟(其实笔者还是懂一点电路设计知识的~),所以最终决定用stm32来设计,纯编程实现。看起来高大上,但实际做起来不难,不过有挺多东西要考虑的。 总的设计思路如下: 首先是基带信号的产生,它也是我们要调制和解调的目标。基带信号由一连串随机的码元序列构成,为了模拟随机的码元序列,笔者用定时器设计8位的PN码序列,码元速率为2000B/s。定时器3定时0.5ms,每进入一次中断,变量num加一,设置一次IO引脚电平,
[单片机]
基于<font color='red'>stm32</font>的FSK调制解调器的设计
使用STM32控制器系列中的DAC生成音频和波形之DAC特性
《前言》 本应用笔记举例介绍了使用数模转换器 (DAC) 外设生成音频输出信号的过程,该 DAC 外设内嵌在 STM32F10xx 微控制器系列产品中。 数模转换器 (DAC) 是一种与模数转换器功能相反的器件,可以将数字形式的数据转换为相应的模拟电压信号。 STM32 DAC 模块是 12 位字转换器,带有两个支持立体声音频的输出通道。 DAC 可用于多种音频应用中,例如:安全警报、蓝牙耳机、发声玩具、答录机、人机接口以及低成本的音乐播放器STM32 DAC 还可实现许多其他模拟用途,如模拟波形产生和控制工程。 《DAC主要特性》 1、数据格式 DAC 可以使用以下三种整型格式的数据:8 位右对齐、12 位右对齐以及
[单片机]
使用<font color='red'>STM32</font>微<font color='red'>控制</font>器系列中的DAC生成音频和波形之DAC特性
stm32delay函数怎么写
STM32的延时函数可以使用SysTick定时器来实现。SysTick定时器是一个24位的计数器,它可以在每个时钟周期自动减少计数值,直到计数值为0时触发中断。我们可以利用SysTick定时器的特性来实现精确的延时函数。 以下是一个实现延时函数的示例代码: #include stm32xxxx.h void SysTick_Handler(void) { // 在这里可以写一些需要周期执行的操作,但是要尽量保持简洁 } void delay_us(uint32_t us) { uint32_t ticks = us * (SystemCoreClock / 1000000); // 将微秒转换为滴答数 Sys
[单片机]
STM32-自学笔记(4.丰富多样的外部设备中)
PWM输入模式: 定时器的捕获单元,还可以同时使用两个捕获通道测量一个外部PWM信号的周期和占空比。 在PWM的输入模式下,输入信号与两个捕获通道连接。假设使用捕获通道1,2。在PWM一个周期开始之后,捕获通道2在其上升沿将主计数器清除并开始向上计数,而随后捕获通道1捕获到PWM的下降沿,此时就得到高电平周期。而捕获通道2再次捕获到下一个周期的PWM的上升沿,就可以得到PWM的周期。并将计数器清楚,准备下一次测量。 编码器接口: 每个定时器的捕获单元都可以和外部的编码器连接。编码器接口的一个典型的应用是电机的角速度和转角位置的检测。 捕获单元在编码器接口工作模式下,由捕获引脚提供定时计数器的驱动时钟,显然该计数器可以识
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved