stm32多路pwm输出控制程序
- 芯片解密#include "stm32f10x.h"
 - 芯片解密#include "TIM.h"
 - 芯片解密#include "DELAY.h"
 - 芯片解密#include "GPIO.h"
 - 芯片解密#include "math.h"
 - 芯片解密#include "DATA.h"
 - int main()
 - {
 - NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//选择中断分组4
 - GPIO_Configuration();
 - TIM3_Init(71,9);//每10us进一次中断
 - NVIC3_Configurature();
 - TIM2_Init(35999,19);//100Hz
 - NVIC2_Configurature();
 -         
 -         slaver_SetAngle(0,220,60);//零号舵机,A1
 -         slaver_SetAngle(1,20,60);//A2
 -         slaver_SetAngle(2,40,60);//A3
 -         slaver_SetAngle(3,60,60);
 -         slaver_SetAngle(4,80,60);
 -         slaver_SetAngle(5,100,60);
 -         slaver_SetAngle(6,120,60);
 -         slaver_SetAngle(8,140,60);
 -         slaver_SetAngle(9,160,60);
 -         slaver_SetAngle(10,170,60);
 -         slaver_SetAngle(11,100,60);
 -         slaver_SetAngle(12,40,60);
 -         slaver_SetAngle(13,60,60);
 -         slaver_SetAngle(14,70,60);
 -         slaver_SetAngle(15,80,60);
 -         slaver_SetAngle(16,90,60);
 -         slaver_SetAngle(17,100,60);
 -         while(1)
 -         {
 -         }
 - }
 -         
 - volatile unsigned short pulse_width = 2000;
 - volatile unsigned int tim3_cnt = 0;//设置的奇数位
 -         
 - void TIM3_IRQHandler(void)//TIM3做PWM输出
 - {
 -         unsigned char j;
 -         TIM3->SR = 0;//清楚中断
 -         
 -         tim3_cnt++;
 -         if(tim3_cnt == pulse_width)
 -         {
 -                 tim3_cnt = 0;
 -                 GPIOA->ODR |= 0XFFFF;//对其他的端口不会影响
 -                 GPIOB->ODR |= 0XFFFF;
 -         }
 -         for(j = 0;j < slave_Number;j ++)
 -         {
 -                 if(tim3_cnt == slaver_data[j].Data_Converted)//等于角度转换值得到的数值
 -                 {
 -                                 (slaver_data[j].GPIOx)->ODR&=~slaver_data[j].GPIO_Pin;//选择端口,进行赋值
 -                 }
 -         }
 - }        
 - void TIM2_IRQHandler(void)//定时器2做控速
 - {
 -         unsigned char i;
 -         TIM2->SR = 0;
 -   
 -         for(i=0; i<slave_Number; i++)
 -         {
 -                 if(fabs(slaver_data[i].Data_Desire - slaver_data[i].Data_Real) < slaver_data[i].Data_Speed*CYCLE_TIM2_UPDATE)//判断实际角度与输入角度的差值
 -                 {
 -                         slaver_data[i].Data_Real = slaver_data[i].Data_Desire;//差值小就直接赋值
 -                 }
 -                 else
 -                 {
 -                         if(slaver_data[i].Data_Desire > slaver_data[i].Data_Real)//输入值大于实际值
 -                         {
 -                                 slaver_data[i].Data_Real += slaver_data[i].Data_Speed*CYCLE_TIM2_UPDATE;//加等于输入值
 -                         }
 -                         else
 -                         {
 -                                 slaver_data[i].Data_Real -= slaver_data[i].Data_Speed*CYCLE_TIM2_UPDATE;//减等于输入值
 -                         }
 -                 }
 -                 slaver_data[i].Data_Converted = (unsigned short)(50.0f + slaver_data[i].Data_Real*SLAVER_CHANGE);//加上偏移量,转换数值
 -         }
 - }
 
上一篇:STM32单片机自带RTC的使用
          
        
  
 
  芯片解密