stm32模拟输出PPM信号

发布者:诚信与爱最新更新时间:2019-09-25 来源: eefocus关键字:stm32  模拟输出  PPM信号 手机看文章 扫描二维码
随时随地手机看文章

PPM信号周期为20ms,分成10分代表10个通道信号,也就是2ms代表一个信号。


0.5ms代表一个通道信号的开始,所以0.5ms-2ms为通道范围控制。


LED p1('A',8); //IO口初始化,这里就不介绍了,推挽输出

 

u16 count=0;

u16 pwm_count=1000; //总计数 周期20ms,20us进次

u16 pwm1=25; //0.5ms

u16 pwm2=30;

u16 pwm3=40;

u16 pwm4=50;

u16 pwm5=75;

u16 pwm6=75;

u16 pwm7=75;

u16 pwm8=75; //2ms

//u16 pwm9=100;

//u16 pwm10=25; //2ms

extern "C" void TIM4_IRQHandler(void)//1ms进来1次

{           

if(TIM4->SR&0X0001)//溢出中断

{

count++;

if(count>0&&count<=100) //ch1

{

if(count<=25)

{

PAout(8)=0;

}

else

{

if(count<=pwm1+25)

{

PAout(8)=1;

}

else

{

PAout(8)=0;

}

}

}

if(count>100&&count<=200) //ch2

{

if(count<=100+25)

{

PAout(8)=0;

}

else

{

if(count<=pwm2+100+25)

{

PAout(8)=1;

}

else

{

PAout(8)=0;

}

}

}

if(count>200&&count<=300) //ch3

{

if(count<=200+25)

{

PAout(8)=0;

}

else

{

if(count<=pwm3+200+25)

{

PAout(8)=1;

}

else

{

PAout(8)=0;

}

}

}

if(count>300&&count<=400) //ch4

{

if(count<=300+25)

{

PAout(8)=0;

}

else

{

if(count<=pwm4+300+25)

{

PAout(8)=1;

}

else

{

PAout(8)=0;

}

}

}

if(count>400&&count<=500) //ch5

{

if(count<=400+25)

{

PAout(8)=0;

}

else

{

if(count<=pwm5+400+25)

{

PAout(8)=1;

}

else

{

PAout(8)=0;

}

}

}

if(count>500&&count<=600) //ch6

{

if(count<=500+25)

{

PAout(8)=0;

}

else

{

if(count<=pwm6+500+25)

{

PAout(8)=1;

}

else

{

PAout(8)=0;

}

}

}

if(count>600&&count<=700) //ch7

{

if(count<=600+25)

{

PAout(8)=0;

}

else

{

if(count<=pwm7+600+25)

{

PAout(8)=1;

}

else

{

PAout(8)=0;

}

}

}

if(count>700&&count<=800) //ch8

{

if(count<=700+25)

{

PAout(8)=0;

}

else

{

if(count<=pwm8+700+25)

{

PAout(8)=1;

}

else

{

PAout(8)=0;

}

}

}

if(count>800&&count<=900) //ch9

{

PAout(8)=1;

}

if(count>900&&count<=1000) //ch10

{

PAout(8)=1;

}

if(count==pwm_count)count=0;

 

 

}    

TIM4->SR&=~(1<<0);//清除中断标志位     

}

//使能定时器4,使能中断.

void Timer1_Init(u16 arr,u16 psc)

{

RCC->APB1ENR|=1<<2; //TIM4时钟使能    

  TIM4->ARR=arr;  //设定计数器自动重装值  

TIM4->PSC=psc;  //预分频器71,得到1Mhz的计数时钟

TIM4->DIER|=1<<0;   //允许更新中断       

TIM4->CR1|=0x01;    //使能定时器2

  MY_NVIC_Init(1,1,TIM4_IRQn,2);//抢占1,子优先级1,组2(组2中优先级最高的)  

}



初始化:Timer1_Init(19,71);

关键字:stm32  模拟输出  PPM信号 引用地址:stm32模拟输出PPM信号

上一篇:如何合理的运用stm32的flash内存
下一篇:stm103c8t6 tim1四个通道配置速度不一样(已解决)

推荐阅读最新更新时间:2024-11-13 21:59

stm32的USART_IT_TXE和USART_IT_TC
一般来说,串口的发送中断传输数据,对于我目前的应用来说,应用的要求并不是很高,因此,因此就一直没有对其进行一个比较好的实验与认识。然而,在一次串口程序升级(IAP)升级实验中,发现有人使用了这个发送中断方式进行的,所以特别的进行了一个个步骤的实验来进一步知道其运行机理。 首先,串口发送数据,可以使用的方式有: 1、 发送一个数据,然后读取USART_IT_TXE或者USART_IT_TC寄存器的状态。 2、 使用串口发送中断 3、 使用dma发送完成中断 在效率上,肯定是3比较好。其次是2。 网上关于USART_IT_TXE和USART_IT_TC是怎么个用法,各家有各家的言论,在我这里只通过实验来了解
[单片机]
STM32学习笔记-配置串口,printf重定向
串口的配置(以stm32f103c8t6串口1为例) USART_InitTypeDef chuanko; RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); chuanko.USART_BaudRate=9600; chuanko.USART_WordLength=USART_WordLength_8b; chuanko.USART_StopBits=USART_StopBits_1; chuanko.USART_Parity=USAR
[单片机]
STM32基于固件库学习笔记(9)TM3产生PWM调LED亮度
PWM   脉冲宽度调制模式可以产生一个由TIMx_ARR寄存器确定频率、由TIMx_CCRx寄存器确定占空比的信号,也就是说对脉冲宽度的控制。   STM32 的定时器除了 TIM6 和 7。其他的定时器都可以用来产生 PWM 输出。其中高级定时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出。而通用定时器也能同时产生多达 4路的 PWM 输出,这样,STM32 最多可以同时产生 30 路 PWM 输出!    在TIMx_CCMRx寄存器中的OCxM位写入’110’(PWM模式1)或’111’(PWM模式2),能够独立地设置每个OCx输出通道产生一路PWM。必须设置TIMx_CCMRx寄存OCxPE
[单片机]
STM32中IO模式
在STM32中选用IO模式 (1) 浮空输入_IN_FLOATING 浮空输入,可以做KEY识别,RX1 (2)带上拉输入_IPU IO内部上拉电阻输入 (3)带下拉输入_IPD IO内部下拉电阻输入 (4) 模拟输入_AIN 应用ADC模拟输入,或者低功耗下省电 (5)开漏输出_OUT_OD IO输出0接GND,IO输出1,悬空,需要外接上拉电阻,才能实现输出高电平。当输出为1时,IO口的状态由上拉电阻拉高电平,但由于是开漏输出模式,这样IO口也就可以由外部电路改变为低电平或不变。可以读IO输入电平变化,实现C51的IO双向功能 (6)推挽输出_OUT_PP IO输出0-接GND, IO输出1 -接VCC,读输入值是未知
[单片机]
其实,STM32有隐藏的定时器~
DWT 在Cortex-M里面有一个外设叫DWT(DataWatchpoint andTrace),是用于系统调试及跟踪,DWT的中文名字应该是:数据观察点触发。在STM32用户手册的第32章节Debugsupport (DBG)有如下框图。 明显DWT属于DBG部分的功能,从上图的标题可以看出DWT属于CortexM3内核的,理论上M3内核的MCU都支持的,这个下文会说明。在这里我将其称之为“隐藏的定时器”,因为他可以代替定时器外设实现上文提到延时功能和测量代码运行时间的功能,DWT不能代替定时器的其他功能。 之所以DWT可以实现延时功能,因为它有一个32的计数器CYCCNT,这是一个向上计数的计数器,当它溢出时会自动清零并
[单片机]
基于STM32单片机的控制步进电机实验
一、实验原理(以28BYJ48步进电机为例)和51控制步进电机原理一致 1、五线四相步进电机,不同线圈得电会让步进电机的转子转动一个角度,按一定规律给不同的线圈通电,就可以让步进电机连续转动,下表就是步进电机和拆解后的图片,以及四根线通电的顺序。 注:总共五条线,一个是VCC,剩下四条分别接上ABCD相。 2、每走一个位置,都要给一定的延时,不然还没等转子到位,下一个脉冲就进来了,肯定会引起错误,导致电机堵转、异常震动。 3、通过改变延时的时间,就可以控制电机的转速,不能太慢,也不要太快,不断调试到合理范围就行,转向用了一个枚举类型,控制转向。 4、单片机IO口和电机四条线连接时,一定不能错误,要按照顺序相连接。 5、调换
[单片机]
基于<font color='red'>STM32</font>单片机的控制步进电机实验
STM32使用内部晶振和外部晶振
在STM32上如果不使用外部晶振,OSC_IN和OSC_OUT的接法 如果使用内部RC振荡器而不使用外部晶振,请按照下面方法处理: 1)对于100脚或144脚的产品,OSC_IN应接地,OSC_OUT应悬空。 2)对于少于100脚的产品,有2种接法: 2.1)OSC_IN和OSC_OUT分别通过10K电阻接地。此方法可提高EMC性能。 2.2)分别重映射OSC_IN和OSC_OUT至PD0和PD1,再配置PD0和PD1为推挽输出并输出'0'。此方法可以减小功耗并(相对上面 首先要明确的是STM32没有内部晶振,HSI是内部RC振荡器。 HSI内部8MHz的RC振荡器的误差在1%左右 内部RC振荡器的精度通常比用HS
[单片机]
gd32和stm32哪个好?
GD32和STM32是两种常见的微控制器系列,是开发者们常用的开发板核心。尽管它们相似之处很多,但它们也存在着差异,本文将深入探讨GD32和STM32,分享它们的优缺点。 首先,我们从GD32说起。GD32是由国内的同时表示中心研发的一种基于ARM Cortex-M3 CPU的微控制器,该平台具有很高的兼容性、低功耗以及出色的性能。许多GD32产品也广泛用在电子产品、智能家居、工业控制系统和无人机开发等领域。 与此相反,STM32系列是ST公司基于Cortex-M3架构开发的高性能微控制器。STM32系列以其高速运算能力、出色的数据处理性能、广泛的官方支持和易用的硬件软件接口而著名。STM32可轻松完成各种任务,比如音频、显示以及
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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