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的flash内存
下一篇:stm103c8t6 tim1四个通道配置速度不一样(已解决)
推荐阅读最新更新时间:2024-11-13 21:59
设计资源 培训 开发板 精华推荐
- STEVAL-ISV012V1,使用 L6924D 高达 5 W 太阳能电池充电器的演示板,用于单节锂离子和锂聚合物电池
- 使用 Diodes Incorporated 的 PI3EQX7741ST 的参考设计
- MCP661DM-LD,线路驱动器演示板,在高速运算放大器、50 欧姆线路(同轴)驱动器的基本应用中使用 MCP661
- STM32F103C8T6开发板-- Lab_F103C8_1.0
- ADM8828 具有关断功能的开关电容器电压逆变器的典型应用
- MIC69153YML EV,用于工业用 0.5V、1.5V、1.8V、2.5V、3.3V DC 到 DC 单路输出电源的评估板
- 1234C
- FRDM-KL26Z: 面向Kinetis® KL16和KL26 MCU (高达128 KB闪存)的Freedom开发平台
- 同步降压控制器可延长电池寿命并适合 3.3V 至 1.8V/7A 稳压器的小尺寸
- RSL10-SENSE-DB-GEVK:带调试器的 RSL10 传感器开发套件