简介
这是一个完成度较高的通过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); //// } // }
无标签
发布日期:
2020-12-14
更新日期:
2021-11-30
文章字数:
609
阅读时长:
3 分
阅读次数: