STM32


  • 简介

    这是一个完成度较高的通过PWM控制电机的文档,硬件是STM32f103,通过串口A9A10接受字符串数据存入main.c中的RX_BUF[],现设计了两个PWM输出接口A7A8.

  • 输出PWM频率为50Hz(20ms)

  • led0pwmval为控制高电位时间的变量

  • 1000为1ms

    “开源就是共产主义!”——某团支书的暴论

  • main.c

  • 链接:

    #include "includes.h"
    #include "timer.h"
    #include "usart.h"
    #include "stm32f10x.h"
    #include "stm32f10x_tim.h"
     int main(void)
     {
    	u16 t; 
    	u16 num;
    	u16 u;
    	u16 len;	
    	u16 i;
    	
    	u16 led0pwmval=1500;
    	//u8 dir=0;	
    	USART1_RX_STA=0;
    	delay_init();	    	 //延时函数初始化
    	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
    	uart1_init(9600);
    	uart3_init(9600);	 //串口初始化为9600
    	//MOTOR_Init();
    	//OLED_Init(); 
    	//KEY_Init();          	//初始化与按键连接的硬件接口	 
    		TIM3_PWM_Init(19999,71);	 //不分频。PWM频率=72000000/900=80Khz 原为(899,0)
    		delay_ms(1000);
    		delay_ms(1000); 
    		
    //		TIM_SetCompare2(TIM3,2130);
    //		delay_ms(1000);
    //		delay_ms(1000); 
    
    		TIM_SetCompare2(TIM3,1500);
    		delay_ms(1000);
    		delay_ms(1000); 	
    	 
    	while(1)
    	{
    		if(USART1_RX_STA&0x8000)
    		 {
    			num=0;//
    		  len=USART1_RX_STA&0x3fff;//得到此次接收到的数据长度
    			for(t=0;t<len;t++)
    				{
    				RX_BUF1[t] = USART1_RX_BUF[t];
    				u=USART1_RX_BUF[t]-'0';
    				num=num*10+u;
    				if (t==0)
    					printf("start\n");
    				printf("%c\r\n",RX_BUF1[t]);
    				if (t==len-1)
    					printf("\nend\n");
    			 }
    		 printf("ready\r\n");
    			}	//
    		 printf("re23\r\n");
    		printf("number is %d\r\n",num);
    		 USART1_RX_STA=0;
    			if (RX_BUF1[0]=='1')
    					led0pwmval=10;
    			else if (RX_BUF1[0]=='2')
    					led0pwmval=100;
    			else if (RX_BUF1[0]=='3')
    					led0pwmval=200;
    			else if (RX_BUF1[0]=='4')
    					led0pwmval=300;
    			else if (RX_BUF1[0]=='5')
    					led0pwmval=400;
    			else if (RX_BUF1[0]=='6')
    					led0pwmval=500;
    			TIM_SetCompare2(TIM3,led0pwmval);
    			delay_ms(1000);
    			/*---------------加到满油门------------*/
    			for(;led0pwmval<2130;)
    			{
    			led0pwmval=led0pwmval+100;
    			}
    			/*---------------降到零油门------------*/
    			for(;led0pwmval>1400;)
    			{
    			led0pwmval=led0pwmval-100;
    			}
    
    			
    			
    //		for(i=0;i<12;i++)
    //		{
    //			TIM_SetCompare2(TIM3,led0pwmval);
    //			led0pwmval=led0pwmval+100;
    //			delay_ms(100);
    //		}
    		led0pwmval=900;
    		 }	
    		 
    }
     		//KEY_Run(); //按键扫描任务,如果有“运行中”啥的,先经过OLED_CHN,再经过Motor_RUN
    
        //OLED_CHN();//OLED显示任务		
    		
    //    while(RunFlag)
    //		 {
    //		 MOTOR_Run();//MOTOR_Run 里面写屏幕显示函数
    //		 }
    		
    
    
      
    		//NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 	 //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
    		//uart_init(115200);	 //串口初始化为115200
    		//LED_Init();			     //LED端口初始化
    	
    //			if((RX_BUF1[0] == '*')&&(RX_BUF1[1] == 'W')&&(RX_BUF1[2] == 'F')&&(RX_BUF1[4] == '#'))
    //			 {
    //				SourceFlag = 1;
    //				TargetPos = RX_BUF1[3] - 48;
    //				if((TargetPos>0)&&(TargetPos<7))  
    //         {
    //				  LenFlag = 1;//工作位
    //				  RunFlag = 1;
    //				  StartFlag = 1;
    //				  ShowFlag = 1;
    //				  CurrentPos = (LenFlag*6) + TargetPos;						
    //				 }
    ////				else
    ////				 {
    ////				  OLED_Clear();
    ////				  OLED_ShowChinese(0,39);
    ////				  OLED_Refresh_Gram();
    ////				  delay_ms(1000);				
    ////				 }
    //			 }
    //			
    //			else if((RX_BUF1[0] == '*')&&(RX_BUF1[1] == 'W')&&(RX_BUF1[2] == 'I')&&(RX_BUF1[4] == '#'))
    //			 {
    //				SourceFlag = 1;
    //				TargetPos = RX_BUF1[3] - 48;
    //				if((TargetPos>0)&&(TargetPos<7))  
    //         {
    //				  LenFlag = 0;//插片位
    //				  RunFlag = 1;
    //				  StartFlag = 1;
    //				  ShowFlag = 1;
    //				  CurrentPos = (LenFlag*6) + TargetPos;		
    //				  //printf("yes\r\n");					
    //				 }
    ////				else
    ////				 {
    ////				  OLED_Clear();
    ////				  OLED_ShowChinese(0,39);
    ////				  OLED_Refresh_Gram();
    ////				  delay_ms(1000);				
    ////				 }
    //			 }	
    

文章作者: rainbow
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 rainbow !
  目录