beep 和 motor

有个代码,原来设计流程如下:

 

1。有效输入信号

2。beep声音提示

3。motor动作提示

 

后来发现电压低的时候,beep提示完毕,系统复位,motor没有动作。

反复测试,原因如下,beep的驱动端口,驱动完毕没有设置成输入,造成beep驱动端口有大电流流入MCU,造成系统功耗迅速增大,从而拉低系统电源电压,造成MCU复位。复位后beep被初始化称输入,系统正常。

 

其他代码都在beep动作后设置成了输入。

 

该代码出错原因:

1。客户要求增加功能,造成原代码溢出。

2。压缩原代码,将设置成输入语句去掉造成上述异常。

 

教训:

1。升级后的代码需要严格按照测试规范全部测试。

2。欠压条件下的功能测试要测试全部功能。

//============================kuman=========================== //  智能小车红外避障实验 //=============================================================== //#include <Servo.h> int Left_motor_back=9;       //左电机后退(IN1) int Left_motor_go=8;         //左电机前进(IN2) int Right_motor_go=6;        // 右电机前进(IN4) int Right_motor_back=7;    // 右电机后退(IN3) int Right_motor_en=5;      // 右电机前进(ENb) int Left_motor_en=10;      // 左电机后退(ENa) int key=13; int beep=12; const int SensorRight = A3;     //右循迹红外传感器(A3) const int SensorLeft = A2;      //左循迹红外传感器(A2) int SL;    //左循迹红外传感器状态 int SR;    //右循迹红外传感器状态 const int SensorRight_2 = A4;     //右红外传感器(A4) const int SensorLeft_2 = A5;     //左红外传感器(A5) int SL_2;    //左红外传感器状态 int SR_2;    //右红外传感器状态 void setup() {   //初始化电机驱动IO为输出方式   pinMode(Left_motor_go,OUTPUT); // PIN 8(PWM)   pinMode(Left_motor_back,OUTPUT); // PIN 9 (PWM)   pinMode(Right_motor_go,OUTPUT);// PIN 6 (PWM)   pinMode(Right_motor_back,OUTPUT);// PIN 7 (PWM)   pinMode(Right_motor_en,OUTPUT);// PIN 5 (PWM)   pinMode(Left_motor_en,OUTPUT);// PIN 10(PWM)    pinMode(key,INPUT);   pinMode(beep,OUTPUT);      pinMode(SensorRight, INPUT); //定义右循迹红外传感器为输入   pinMode(SensorLeft, INPUT); //定义左循迹红外传感器为输入   pinMode(SensorRight_2, INPUT); //定义右红外传感器为输入   pinMode(SensorLeft_2, INPUT); //定义左红外传感器为输入   digitalWrite(key,HIGH);   digitalWrite(beep,LOW); } void run()     // 前进 {    digitalWrite(Left_motor_en,HIGH);  // 左电机使能   digitalWrite(Right_motor_en,HIGH);  // 右电机使能   digitalWrite(Right_motor_go,HIGH);  // 右电机前进   digitalWrite(Right_motor_back,LOW);       analogWrite(Right_motor_go,120);//PWM比例0~255调速,左右轮差异略增减   analogWrite(Right_motor_back,0);   digitalWrite(Left_motor_go,HIGH);  // 左电机前进   digitalWrite(Left_motor_back,LOW);   analogWrite(Left_motor_go,140);//PWM比例0~255调速,左右轮差异略增减   analogWrite(Left_motor_back,0);   //delay(time * 100);   //执行时间,可以调整   } void brake()         //刹车 {   digitalWrite(Right_motor_go,LOW);   digitalWrite(Right_motor_back,LOW);    digitalWrite(Left_motor_go,LOW);   digitalWrite(Left_motor_back,LOW);   //delay(time * 100);   } void left()         //左转(左轮不动,右轮前进) {   digitalWrite(Right_motor_go,HIGH);  // 右电机前进   digitalWrite(Right_motor_back,LOW);   analogWrite(Right_motor_go,190); //PWM比例0~255调速   analogWrite(Right_motor_back,0);//PWM比例0~255调速   digitalWrite(Left_motor_go,LOW);   //左电机后退   digitalWrite(Left_motor_back,LOW);   analogWrite(Left_motor_go,0); //PWM比例0~255调速   analogWrite(Left_motor_back,0);//PWM比例0~255调速  //delay(time * 100); } void spin_left(int time)         //左转(左轮后退,右轮前进) {   digitalWrite(Right_motor_go,HIGH);//右电机前进   digitalWrite(Right_motor_back,LOW);   analogWrite(Right_motor_go,200);//PWM比例0~255调速   analogWrite(Right_motor_back,0);//PWM比例0~255调速   digitalWrite(Left_motor_go,LOW);   // 左电机后退   digitalWrite(Left_motor_back,HIGH);   analogWrite(Left_motor_go,0); //PWM比例0~255调速   analogWrite(Left_motor_back,200);//PWM比例0~255调速   delay(time * 100); } void right()      //右转(右轮不动,左轮前进) {   digitalWrite(Right_motor_go,LOW);    //右电机后退   digitalWrite(Right_motor_back,LOW);   analogWrite(Right_motor_go,0); //PWM比例0~255调速   analogWrite(Right_motor_back,0);//PWM比例0~255调速   digitalWrite(Left_motor_go,HIGH);//左电机前进   digitalWrite(Left_motor_back,LOW);   analogWrite(Left_motor_go,230);//PWM比例0~255调速   analogWrite(Left_motor_back,0);//PWM比例0~255调速   //delay(time * 100);//执行时间,可以调整   } void spin_right(int time)        //右转(右轮后退,左轮前进) {   digitalWrite(Right_motor_go,LOW);   //右电机后退   digitalWrite(Right_motor_back,HIGH);   analogWrite(Right_motor_go,0);   analogWrite(Right_motor_back,200);//PWM比例0~255调速   digitalWrite(Left_motor_go,HIGH);//左电机前进   digitalWrite(Left_motor_back,LOW);   analogWrite(Left_motor_go,200);//PWM比例0~255调速   analogWrite(Left_motor_back,0);   delay(time * 100); } void back(int time)          //后退 {   digitalWrite(Right_motor_go,LOW); //右电机后退   digitalWrite(Right_motor_back,HIGH);   analogWrite(Right_motor_go,0);   analogWrite(Right_motor_back,150);//PWM比例0~255调速   analogWrite(Right_motor_en,165);   digitalWrite(Left_motor_go,LOW);  //左电机后退   digitalWrite(Left_motor_back,HIGH);   analogWrite(Left_motor_go,0);   analogWrite(Left_motor_back,140);//PWM比例0~255调速   delay(time * 100); } //========================================================== void keysacn() {   int val;       val=digitalRead(key);//读取按键的值赋给val   while(digitalRead(key))//当按键没被按下时,一直循环   {     val=digitalRead(key);   }   while(!digitalRead(key))//当按键被按下时   {     delay(10);  //延时10ms     val=digitalRead(key);//读取按键的值赋给val     if(val==LOW)  //第二次判断按键是否被按下     {               digitalWrite(beep,HIGH);   //蜂鸣器响       delay(50);       while(!digitalRead(key))  //判断按键是否被松开         digitalWrite(beep,LOW);    //蜂鸣器停止     }     else       digitalWrite(beep,LOW);//蜂鸣器停止   } } /*main loop*/ void loop() { //delay(2000); //delay 2s runing  keysacn();//Press the button to start    while(1)   {     //有信号为LOW  没有信号为HIGH     SR_2 = digitalRead(SensorRight_2);//读取SensorRight_2的数据并把读取到的数字赋值给SR_2     SL_2 = digitalRead(SensorLeft_2);////读取SensorLeft_2的数据并把读取到的数字赋值给SL_2     if (SL_2 == HIGH&&SR_2==HIGH)       run();   //调用前进函数     else if (SL_2 == HIGH & SR_2 == LOW)// 右边探测到有障碍物,有信号返回,向左转           spin_left(3);     else if (SR_2 == HIGH & SL_2 == LOW) //左边探测到有障碍物,有信号返回,向右转            spin_right(3);     else // 都是有障碍物, 后退       back(6);//600ms 后退         } } //如果小车遇到障碍物,请调整避障的红外传感器感应距离。 //============================KUMAN========================== //  智能小车超声波避障实验 //=============================================================== int Echo = A1;  // Echo回声脚(A1) int Trig =A0;  //  Trig 触发脚(A0) int Distance = 0; //============================== //============================== int Left_motor_back=9;       //左电机后退(IN1) int Left_motor_go=8;         //左电机前进(IN2) int Right_motor_go=6;        // 右电机前进(IN4) int Right_motor_back=7;    // 右电机后退(IN3) int Right_motor_en=5;      // 右电机使能 int Left_motor_en=10;      // 右电机使能 int key=13;    //按键引脚定义 int beep=12;   //蜂鸣器引脚定义 void setup() {   Serial.begin(9600); //波特率9600 (蓝牙通讯设定波特率)   //初始化电机驱动IO为输出方式   pinMode(Left_motor_go,OUTPUT); // PIN 8 (PWM)   pinMode(Left_motor_back,OUTPUT); // PIN 9 (PWM)   pinMode(Right_motor_go,OUTPUT);// PIN 6 (PWM)   pinMode(Right_motor_back,OUTPUT);// PIN 7 (PWM)   pinMode(Right_motor_en,OUTPUT);// PIN 5 (PWM)   pinMode(Left_motor_en,OUTPUT);// PIN 10 (PWM)     pinMode(key,INPUT);// pin 13   pinMode(beep,OUTPUT);// pin  12     pinMode(Echo, INPUT);    // pin A1   pinMode(Trig, OUTPUT);   // pin A0     digitalWrite(key,HIGH);//初始化按键   digitalWrite(beep,LOW);// 设置蜂鸣器静音   } void run()     // 前进 {   digitalWrite(Left_motor_en,HIGH);  // 左电机使能   analogWrite(Left_motor_en,157);   digitalWrite(Right_motor_en,HIGH);  // 右电机使能     digitalWrite(Right_motor_go,HIGH);  // 右前电机前进   digitalWrite(Right_motor_back,LOW);  //右后电机停止     analogWrite(Right_motor_go,200);//PWM比例0~255调速,右前电机速度为200,左右轮差异略增减   analogWrite(Right_motor_back,0);//PWM比例0~255调速,右后电机速度为0,左右轮差异略增减   digitalWrite(Left_motor_go,HIGH);  // 左电机前进   digitalWrite(Left_motor_back,LOW);   analogWrite(Left_motor_go,137);//PWM比例0~255调速,左前电机速度为137,左右轮差异略增减   analogWrite(Left_motor_back,0);//PWM比例0~255调速,左后电机速度为0,左右轮差异略增减  // delay(time * 100);   //执行时间,可以调整  毫秒级 } void brake(int time)         //刹车,停车 {   digitalWrite(Right_motor_go,LOW);//右电机停止   digitalWrite(Right_motor_back,LOW);   digitalWrite(Left_motor_go,LOW);//左电机停止   digitalWrite(Left_motor_back,LOW);     delay(time * 100);//执行时间,可以调整   } void left(int time)         //左转(左轮不动,右轮前进) {   digitalWrite(Right_motor_go,HIGH);  // 右电机前进   digitalWrite(Right_motor_back,LOW);   analogWrite(Right_motor_go,190); // PWM比例0~255调速,右前电机速度为190   analogWrite(Right_motor_back,0);// PWM比例0~255调速,右后电机速度为0   digitalWrite(Left_motor_go,LOW);   // 左电机停止   digitalWrite(Left_motor_back,LOW);   analogWrite(Left_motor_go,0); // PWM比例0~255调速,左前前电机速度为0   analogWrite(Left_motor_back,0);// PWM比例0~255调速,左后电机速度为0   delay(time * 100);  //执行时间,可以调整 } void spin_left(int time)         //左转(左轮后退,右轮前进) {   digitalWrite(Right_motor_go,HIGH);  // 右电机前进   digitalWrite(Right_motor_back,LOW);   analogWrite(Right_motor_go,200);// PWM比例0~255调速,右前电机速度为200   analogWrite(Right_motor_back,0); // PWM比例0~255调速,右后电机速度为0   digitalWrite(Left_motor_go,LOW);   // 左电机后退   digitalWrite(Left_motor_back,HIGH);   analogWrite(Left_motor_go,0); //  PWM比例0~255调速,左前电机速度为0   analogWrite(Left_motor_back,200);//  PWM比例0~255调速,左后电机速度为200   delay(time * 100);  //执行时间,可以调整 } void right(int time)        //右转(右轮不动,左轮前进) {   digitalWrite(Right_motor_go,LOW);   // 右前电机停止   digitalWrite(Right_motor_back,LOW);   analogWrite(Right_motor_go,0); // PWM比例0~255调速,右前电机速度为0   analogWrite(Right_motor_back,0);// PWM比例0~255调速,右后电机速度为0   digitalWrite(Left_motor_go,HIGH);// 左前电机前进   digitalWrite(Left_motor_back,LOW);   analogWrite(Left_motor_go,230); // PWM比例0~255调速, 左前电机速度为230   analogWrite(Left_motor_back,0);// PWM比例0~255调速,左后电机速度为0   delay(time * 100);  //执行时间,可以调整   } void spin_right(int time)        //右转(右轮后退,左轮前进) {   digitalWrite(Right_motor_go,LOW);   // 右电机后退   digitalWrite(Right_motor_back,HIGH);   analogWrite(Right_motor_go,0); // PWM比例0~255调速,右前电机速度为0   analogWrite(Right_motor_back,200);// PWM比例0~255调速,右后电机速度为200   digitalWrite(Left_motor_go,HIGH);// 左前电机前进   digitalWrite(Left_motor_back,LOW);   analogWrite(Left_motor_go,200); // PWM比例0~255调速,左前电机速度为200   analogWrite(Left_motor_back,0);   delay(time * 100);  //执行时间,可以调整   } void back(int time)          //后退 {   digitalWrite(Right_motor_go,LOW); //right motor back off   digitalWrite(Right_motor_back,HIGH);   analogWrite(Right_motor_go,0);// PWM比例0~255调速,右前电机速度为0   analogWrite(Right_motor_back,150);// PWM比例0~255调速,右后电机速度为150   analogWrite(Right_motor_en,165);   digitalWrite(Left_motor_go,LOW);  // 左电机停止   digitalWrite(Left_motor_back,HIGH);   analogWrite(Left_motor_go,0);   analogWrite(Left_motor_back,140);// PWM比例0~255调速,右后电机速度为140    delay(time * 100);     //执行时间,可以调整   } //========================================================== void Distance_test()   // 测距 {   digitalWrite(Trig, LOW);    // 设置Trig管脚低电平2us   delayMicroseconds(2);   digitalWrite(Trig, HIGH);  //设置Trig管脚高电平10μs(最少 10μs)   delayMicroseconds(10);   digitalWrite(Trig, LOW);    // 设置trig管脚低电平   float Fdistance = pulseIn(Echo, HIGH);  // 读取echo 管脚高电平时间   Fdistance= Fdistance/58;       // Distance(m) =(time(s) * 344(m/s)) / 2   Serial.print("Distance:");      //打印 Distance字符   Serial.println(Fdistance);         //显示距离   Distance = Fdistance; }     //========================================================== void keysacn() {   int val;     val=digitalRead(key);// 读取按键的值并传递给val变量   while(digitalRead(key))// 判断按钮是否被按下   {     val=digitalRead(key);   }   while(!digitalRead(key))   {     delay(10);  //delay 10ms     val=digitalRead(key);//读取按键的值并传递给val变量     if(val==LOW)  //再次判断按键是否被按下     {               digitalWrite(beep,HIGH);//蜂鸣器发声       delay(50);//delay 50ms       while(!digitalRead(key))  //判断按键是否松开       digitalWrite(beep,LOW);//蜂鸣器静音     }     else       digitalWrite(beep,LOW);//蜂鸣器静音   } } /*主函数*/ void loop() {   keysacn();//你按下按钮开始     while(1)   {       Distance_test();//测量前方距离         if(Distance <38)//判断前方距离, 35这个值是遇到障碍物的距离,可以根据实际情况来设定       {       delay(10);       Distance_test();//测量前方距离       while(Distance<38)//再次判断前方距离。如果前方距离小于35CM,就旋转后继续判断       {        spin_right(4);//向右旋转 300ms         brake(1);//刹车         delay(100);         Distance_test();//测量前方距离       }     }     else          run();//判断没有障碍物就前进           } } //============================KUMAN======================================== //  智能小车红外遥控实验 //============================================================================= #include <IRremote.h>//包含红外库   //Infrared Remote Control int RECV_PIN = 2;//端口声明 IRrecv irrecv(RECV_PIN); decode_results results;//结构声明 int on = 0;//标志位 unsigned long last = millis(); long run_car = 0x00FD8877;//按键 UP long back_car = 0x00FD9867;//按键 DW   long left_car = 0x00FD28D7;//按键L long right_car = 0x00FD6897;//按键R long stop_car = 0x00FDA857;//按键OK long left_turn = 0x00FD30CF;//按键* long right_turn = 0x00FD708F;//按键# long Buzzer_speak = 0x00FDB04F;//按键 0 //============================== int Left_motor_back=9;       //左电机后退(IN1) int Left_motor_go=8;         //左电机前进(IN2) int Right_motor_go=6;        // 右电机前进(IN4) int Right_motor_back=7;    // 右电机后退(IN3) int Right_motor_en=5;      // 右电机前进(ENb) int Left_motor_en=10;      // 左电机后退(ENa) int Left_led=3;//Left led int Right_led=4;//Right led int key=13; int beep=12; void setup() {   //初始化电机驱动IO为输出方式   pinMode(Left_motor_go,OUTPUT); // PIN 8 (PWM)   pinMode(Left_motor_back,OUTPUT); // PIN 9 (PWM)   pinMode(Right_motor_go,OUTPUT);// PIN 6 (PWM)   pinMode(Right_motor_back,OUTPUT);// PIN 7 (PWM)   pinMode(Right_motor_en,OUTPUT);// PIN 5 (PWM)   pinMode(Left_motor_en,OUTPUT);// PIN 10(PWM)   pinMode(Left_led,OUTPUT);// PIN 3 OUTPUT HIGH   pinMode(Right_led,OUTPUT);// PIN 4 OUTPUT HIGH     pinMode(key,INPUT);   pinMode(beep,OUTPUT);   Serial.begin(9600); //波特率9600   irrecv.enableIRIn(); // Start the receiver } void run()     // 前进 {   digitalWrite(Left_motor_en,HIGH);  // 右电机使能   analogWrite(Left_motor_en,157);   digitalWrite(Right_motor_en,HIGH);  // 右电机使能     digitalWrite(Right_motor_go,HIGH);  // 右电机前进   digitalWrite(Right_motor_back,LOW);     analogWrite(Right_motor_go,200);//PWM比例0~255调速   analogWrite(Right_motor_back,0);//PWM比例0~255调速   digitalWrite(Left_motor_go,HIGH);  // 左电机前进   digitalWrite(Left_motor_back,LOW);   analogWrite(Left_motor_go,137);//PWM比例0~255调速   analogWrite(Left_motor_back,0);//PWM比例0~255调速   //delay(time * 100);   //Running time can be adjusted   digitalWrite(Right_led,LOW);   digitalWrite(Left_led,LOW);   } void brake()         //STOP {  digitalWrite(Left_motor_back, LOW); //右电机停止   digitalWrite(Left_motor_go, LOW);     digitalWrite(Right_motor_go, LOW); //左电机停止   digitalWrite(Right_motor_back, LOW);   //delay(time * 100);  //执行时间,可以调整     led();   } void left()        //turn left {   digitalWrite(Right_motor_go,HIGH);  // right motor go ahead   digitalWrite(Right_motor_back,LOW);   analogWrite(Right_motor_go,190); // PWM--Pulse Width Modulation(0~255) control speed,right motor go speed is 255.   analogWrite(Right_motor_back,0);   digitalWrite(Left_motor_go,LOW);   // left motor stop   digitalWrite(Left_motor_back,LOW);   analogWrite(Left_motor_go,0);   analogWrite(Left_motor_back,0);   //delay(time * 100);     digitalWrite(Left_led,HIGH);   digitalWrite(Right_led,LOW);   } void spin_left()         //左转(左轮后退,右轮前进) {   digitalWrite(Right_motor_go, HIGH); // 右前电机前进   digitalWrite(Right_motor_back, LOW);// 右后电机停止   analogWrite(Right_motor_go,200); //PWM比例0~255调速   analogWrite(Right_motor_back,0);//PWM比例0~255调速   digitalWrite(Left_motor_go, LOW);  // 左前电机停止   digitalWrite(Left_motor_back, HIGH);// 左后电机后退   analogWrite(Left_motor_go,0); //PWM比例0~255调速   analogWrite(Left_motor_back,200);//PWM比例0~255调速   //delay(time * 100);//执行时间,可以调整     digitalWrite(Left_led,HIGH);   digitalWrite(Right_led,LOW);     } void right()        //右转(右轮不动,左轮前进) {   digitalWrite(Right_motor_go, LOW);  // 右电机后退   digitalWrite(Right_motor_back, LOW);   analogWrite(Right_motor_go,0); //PWM比例0~255调速   analogWrite(Right_motor_back,0);//PWM比例0~255调速   digitalWrite(Left_motor_go, HIGH); // 左电机前进   digitalWrite(Left_motor_back, LOW);   analogWrite(Left_motor_go,230); //PWM比例0~255调速   analogWrite(Left_motor_back,0);//PWM比例0~255调速   //delay(time * 100);//执行时间,可以调整   digitalWrite(Right_led,HIGH);   digitalWrite(Left_led,LOW);   } void spin_right()        //右转(右轮后退,左轮前进) {   digitalWrite(Right_motor_go, LOW);  // 右电机后退   digitalWrite(Right_motor_back, HIGH);   analogWrite(Right_motor_go,0); //PWM比例0~255调速   analogWrite(Right_motor_back,200);//PWM比例0~255调速   digitalWrite(Left_motor_go, HIGH); //左电机前进   digitalWrite(Left_motor_back, LOW);   analogWrite(Left_motor_go,200); //PWM比例0~255调速   analogWrite(Left_motor_back,0);//PWM比例0~255调速   //delay(time * 100);//执行时间,可以调整     digitalWrite(Right_led,HIGH);   digitalWrite(Left_led,LOW);   } void back()   //后退 {   digitalWrite(Right_motor_go, LOW); // 右电机后退   digitalWrite(Right_motor_back,HIGH);   analogWrite(Right_motor_go,0);//PWM比例0~255调速   analogWrite(Right_motor_back,150);//PWM比例0~255调速      analogWrite(Right_motor_en,165);   digitalWrite(Left_motor_go, LOW); // 左电机后退   digitalWrite(Left_motor_back,HIGH);   analogWrite(Left_motor_go,0);//PWM比例0~255调速   analogWrite(Left_motor_back,140);//PWM比例0~255调速  // delay(time * 100);//执行时间,可以调整     } void buzzer() {   digitalWrite (beep,HIGH);   delay(1000);   digitalWrite (beep,LOW); } void led() {   digitalWrite(Right_led,HIGH);   digitalWrite(Left_led,HIGH);   delay (100);   digitalWrite(Right_led,LOW);   digitalWrite(Left_led,LOW);   delay (100);   digitalWrite(Right_led,HIGH);   digitalWrite(Left_led,HIGH);   delay (100);   digitalWrite(Right_led,LOW);   digitalWrite(Left_led,LOW);   delay (100);   digitalWrite(Right_led,HIGH);   digitalWrite(Left_led,HIGH);       }   void dump(decode_results *results)//解码红外遥控接收信号 {   int count = results->rawlen;   if (results->decode_type == UNKNOWN)   {     brake();   } //串口打印,调试时可以打开,实际运行中会影响反应速度,建议屏蔽   /*else   {     if (results->decode_type == NEC)     {       Serial.print("Decoded NEC: ");     }     else if (results->decode_type == SONY)     {       Serial.print("Decoded SONY: ");     }     else if (results->decode_type == RC5)     {       Serial.print("Decoded RC5: ");     }     else if (results->decode_type == RC6)     {       Serial.print("Decoded RC6: ");     }     Serial.print(results->value, HEX);     Serial.print(" (");     Serial.print(results->bits, DEC);     Serial.println(" bits)");       }   Serial.print("Raw (");   Serial.print(count, DEC);   Serial.print("): ");   for (int i = 0; i < count; i++)   {     if ((i % 2) == 1)     {       Serial.print(results->rawbuf[i]*USECPERTICK, DEC);     }     else       {       Serial.print(-(int)results->rawbuf[i]*USECPERTICK, DEC);     }     Serial.print(" ");   }   Serial.println(""); */ } void loop() {   if (irrecv.decode(&results)) //调用库函数:解码   {     if (millis() - last > 250) //确定接收到信号     {       on = !on;//标志位置反             dump(&results);//解码红外信号     }     if (results.value == run_car )//按键UP       run();//前进     if (results.value == back_car )//按键DW       back();//后退     if (results.value == left_car )//按键left       left();//左转     if (results.value == right_car )//按键right       right();//右转     if (results.value == stop_car )//按键ok       brake();//停车     if (results.value == left_turn )//按键*       spin_left();//左旋转     if (results.value == right_turn )//按键#       spin_right();//右旋转     if (results.value == Buzzer_speak )//按键0      buzzer();//speaker               last = millis();           irrecv.resume(); // Receive the next value   } }以上代码是三个功能的单个代码组成,请帮我把这三个代码集成为一个代码并且互不影响,并且将批注全部改成英文
05-23
正在开发的是一个 基于 STM32F103C8T6 的多功能智能小车控制系统,功能包括: 按键切换模式(巡线 / 避障 / 混合 / 停止) 红外循迹 超声波避障 LCD 显示 蜂鸣器提示音 C/D点弯道识别并鸣笛 /* USER CODE BEGIN Header */ /** ****************************************************************************** * @file : main.c * @brief : ??????? (STM32F103C8T6 ???) * @author : AI Assistant * @version : 2.0 * @date : 2025-11-30 ****************************************************************************** */ /* USER CODE END Header */ /* Includes ------------------------------------------------------------------*/ #include "main.h" #include "tim.h" #include "usart.h" #include "gpio.h" #include <stdio.h> #include <string.h> /* Private variables ---------------------------------------------------------*/ uint8_t runMode = 3; /* 0=?? 1=?? 2=?? 3=?? */ uint8_t carBodyState = 4; /* 0=? 2=? 3=? 4=? */ uint8_t leftState = 0; uint8_t centreState = 0; uint8_t rightState = 0; static uint8_t wasTurning = 0; static uint8_t eventCount = 0; static uint8_t beepCooldown = 0; char showBuffer[32] = {0}; int distance = 0; uint32_t tick30ms = 0; static uint8_t lastKey = 1; /* ???? */ #define DISTANCE_THRESHOLD 60 #define HYBRID_DIST 30 /* ??????(???? gpio.h ???)------------------------------------*/ #ifndef KEY_Pin #define KEY_Pin GPIO_PIN_0 #define KEY_GPIO_Port GPIOA #endif #ifndef IR_L_Pin #define IR_L_Pin GPIO_PIN_1 #define IR_L_GPIO_Port GPIOA #endif #ifndef IR_M_Pin #define IR_M_Pin GPIO_PIN_2 #define IR_M_GPIO_Port GPIOA #endif #ifndef IR_R_Pin #define IR_R_Pin GPIO_PIN_3 #define IR_R_GPIO_Port GPIOA #endif #ifndef BEEP_Pin #define BEEP_Pin GPIO_PIN_4 #define BEEP_GPIO_Port GPIOA #endif #ifndef LED_Pin #define LED_Pin GPIO_PIN_5 #define LED_GPIO_Port GPIOA #endif /* ??????(??? PWM ??????)-------------------------------*/ #ifndef MOTOR_L_IN1_Pin #define MOTOR_L_IN1_Pin GPIO_PIN_12 #define MOTOR_L_IN1_GPIO_Port GPIOB #endif #ifndef MOTOR_L_IN2_Pin #define MOTOR_L_IN2_Pin GPIO_PIN_13 #define MOTOR_L_IN2_GPIO_Port GPIOB #endif #ifndef MOTOR_R_IN1_Pin #define MOTOR_R_IN1_Pin GPIO_PIN_14 #define MOTOR_R_IN1_GPIO_Port GPIOB #endif #ifndef MOTOR_R_IN2_Pin #define MOTOR_R_IN2_Pin GPIO_PIN_15 #define MOTOR_R_IN2_GPIO_Port GPIOB #endif /* ???? */ void SystemClock_Config(void); void Error_Handler(void); void update_line_sensor_state(void); void patrol_mode(void); void obstacle_avoidance_mode(void); void hybrid_mode(void); void update_mode_display(void); /* ==================== ??:???????? ======================== */ /** * @brief ??????? */ void beep_once(void) { HAL_GPIO_WritePin(BEEP_GPIO_Port, BEEP_Pin, GPIO_PIN_SET); HAL_Delay(60); HAL_GPIO_WritePin(BEEP_GPIO_Port, BEEP_Pin, GPIO_PIN_RESET); } /** * @brief ????(?? C/D ???) */ void beep_twice(void) { beep_once(); HAL_Delay(100); beep_once(); } /** * @brief ???????(?????) * @param left: ???? (-1000 ~ 1000),???? * @param right: ???? (-1000 ~ 1000),???? */ void set_motor_speed(int left, int right) { // === ?????? === if (left > 0) { HAL_GPIO_WritePin(MOTOR_L_IN1_GPIO_Port, MOTOR_L_IN1_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(MOTOR_L_IN2_GPIO_Port, MOTOR_L_IN2_Pin, GPIO_PIN_RESET); } else if (left < 0) { HAL_GPIO_WritePin(MOTOR_L_IN1_GPIO_Port, MOTOR_L_IN1_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(MOTOR_L_IN2_GPIO_Port, MOTOR_L_IN2_Pin, GPIO_PIN_SET); } else { HAL_GPIO_WritePin(MOTOR_L_IN1_GPIO_Port, MOTOR_L_IN1_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(MOTOR_L_IN2_GPIO_Port, MOTOR_L_IN2_Pin, GPIO_PIN_RESET); } // === ?????? === if (right > 0) { HAL_GPIO_WritePin(MOTOR_R_IN1_GPIO_Port, MOTOR_R_IN1_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(MOTOR_R_IN2_GPIO_Port, MOTOR_R_IN2_Pin, GPIO_PIN_RESET); } else if (right < 0) { HAL_GPIO_WritePin(MOTOR_R_IN1_GPIO_Port, MOTOR_R_IN1_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(MOTOR_R_IN2_GPIO_Port, MOTOR_R_IN2_Pin, GPIO_PIN_SET); } else { HAL_GPIO_WritePin(MOTOR_R_IN1_GPIO_Port, MOTOR_R_IN1_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(MOTOR_R_IN2_GPIO_Port, MOTOR_R_IN2_Pin, GPIO_PIN_RESET); } // === ?? PWM ???(???)=== uint16_t pwm_left = (left < 0) ? -left : left; uint16_t pwm_right = (right < 0) ? -right : right; if (pwm_left > 1000) pwm_left = 1000; if (pwm_right > 1000) pwm_right = 1000; __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, pwm_left); __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_2, pwm_right); } /** * @brief ????(???) */ int get_distance(void) { return 45; // ???? 45cm } /** * @brief LCD ???(???,??????) */ void lcd1602_init(void) {} /** * @brief ????? */ void lcd1602_show_string(uint8_t x, uint8_t y, uint8_t *str) { (void)x; (void)y; (void)str; } /** * @brief ???? */ void lcd1602_show_char(uint8_t x, uint8_t y, uint8_t c) { (void)x; (void)y; (void)c; } /* Main ?? =========================================================*/ int main(void) { HAL_Init(); /* =============== ????? AFIO ???? TIM3 =============== */ __HAL_RCC_AFIO_CLK_ENABLE(); __HAL_AFIO_REMAP_TIM3_PARTIAL(); // PA6=CH1, PA7=CH2 ? ???? PB0/PB1 SystemClock_Config(); MX_GPIO_Init(); MX_TIM3_Init(); MX_USART1_UART_Init(); /* ?? PWM ??(PA6=??, PA7=??)*/ HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1); // PA6 HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2); // PA7 /* ??????(??? MX_GPIO_Init ???)*/ __HAL_RCC_GPIOA_CLK_ENABLE(); GPIO_InitTypeDef gpio = {0}; gpio.Pin = BEEP_Pin; gpio.Mode = GPIO_MODE_OUTPUT_PP; gpio.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(BEEP_GPIO_Port, &gpio); /* LCD ??? */ lcd1602_init(); lcd1602_show_string(0, 0, (uint8_t *)"Intelligence Car"); lcd1602_show_string(0, 1, (uint8_t *)"MS:TZMS JL:xxxCM"); /* ??? */ while (1) { /* ======== ????(PA0)======== */ uint8_t key = HAL_GPIO_ReadPin(KEY_GPIO_Port, KEY_Pin); if (lastKey == 1 && key == 0) { HAL_Delay(20); if (HAL_GPIO_ReadPin(KEY_GPIO_Port, KEY_Pin) == 0) { runMode = (runMode + 1) % 4; beep_once(); if (runMode == 3) set_motor_speed(0, 0); update_mode_display(); while (HAL_GPIO_ReadPin(KEY_GPIO_Port, KEY_Pin) == 0); } } lastKey = key; /* ======== ? 30ms ???????? ======== */ if (HAL_GetTick() - tick30ms >= 30) { tick30ms = HAL_GetTick(); distance = get_distance(); if (distance > 999) distance = 999; lcd1602_show_char(11, 1, '0' + distance / 100); lcd1602_show_char(12, 1, '0' + (distance / 10) % 10); lcd1602_show_char(13, 1, '0' + distance % 10); } /* ======== ?????? ======== */ update_line_sensor_state(); /* ======== C/D????????? ======== */ uint8_t turningNow = (carBodyState == 2 || carBodyState == 3); if (beepCooldown > 0) beepCooldown--; if (!wasTurning && turningNow) { eventCount++; if (beepCooldown == 0) { beep_twice(); beepCooldown = 100; // ?? } } if (eventCount >= 2) eventCount = 0; wasTurning = turningNow; /* ======== ?????? ======== */ switch (runMode) { case 0: patrol_mode(); break; case 1: obstacle_avoidance_mode(); break; case 2: hybrid_mode(); break; default: set_motor_speed(0, 0); break; } HAL_Delay(1); // ???? } } /* ?????? =====================================================*/ void update_line_sensor_state(void) { leftState = HAL_GPIO_ReadPin(IR_L_GPIO_Port, IR_L_Pin); centreState = HAL_GPIO_ReadPin(IR_M_GPIO_Port, IR_M_Pin); rightState = HAL_GPIO_ReadPin(IR_R_GPIO_Port, IR_R_Pin); if (centreState == 1) { carBodyState = 0; // ?? } else if (leftState == 1 && rightState == 0) { carBodyState = 2; // ?? } else if (leftState == 0 && rightState == 1) { carBodyState = 3; // ?? } else { carBodyState = 0; // ???? } } void patrol_mode(void) { switch (carBodyState) { case 0: set_motor_speed(800, 800); break; // ?? case 2: set_motor_speed(400, 700); break; // ?? ? ???? case 3: set_motor_speed(700, 400); break; // ?? ? ???? default: set_motor_speed(0, 0); break; } } void obstacle_avoidance_mode(void) { if (get_distance() < DISTANCE_THRESHOLD) { beep_once(); set_motor_speed(0, 0); HAL_Delay(200); set_motor_speed(-500, 500); HAL_Delay(300); // ?? set_motor_speed(600, 600); HAL_Delay(600); // ?? set_motor_speed(500, -500); HAL_Delay(300); // ?? while (get_distance() < DISTANCE_THRESHOLD) { set_motor_speed(500, 500); HAL_Delay(100); } beep_once(); } else { set_motor_speed(600, 600); // ???? } } void hybrid_mode(void) { if (get_distance() < HYBRID_DIST) { beep_once(); set_motor_speed(0, 0); HAL_Delay(300); set_motor_speed(-500, 500); HAL_Delay(400); // ?? set_motor_speed(600, 600); HAL_Delay(1000); // ?? set_motor_speed(500, -500); HAL_Delay(150); // ?? while (!leftState && !rightState) { update_line_sensor_state(); set_motor_speed(500, 500); HAL_Delay(80); } beep_once(); } else { patrol_mode(); } } void update_mode_display(void) { const char* modeStr[] = {"XX", "BZ", "XB", "TZ"}; snprintf(showBuffer, sizeof(showBuffer), "MS:%s JL:%03dCM", modeStr[runMode], distance); lcd1602_show_string(0, 1, (uint8_t *)showBuffer); } /* ?????? =====================================================*/ void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; // 8MHz * 9 = 72MHz if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); } RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) { Error_Handler(); } } /* ?????? =====================================================*/ void Error_Handler(void) { __disable_irq(); while (1) { HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); HAL_Delay(200); } } 修改程序使运行更顺畅
最新发布
12-01
/* USER CODE BEGIN Header */ /** ****************************************************************************** * @file : main.c * @brief : ????????(?? 30 ???) * @author : AI Assistant * @version : 1.1 * @date : 2025-11-30 ****************************************************************************** */ /* USER CODE END Header */ /* Includes ------------------------------------------------------------------*/ #include "main.h" #include "tim.h" #include "usart.h" #include "gpio.h" #include <stdio.h> #include <string.h> /* ??????(?????????,?? extern ????) */ extern void beep_once(void); extern void beep_twice(void); extern void set_motor_speed(int left, int right); extern int get_distance(void); /* ???? hc-sr04.c */ extern void lcd1602_init(void); extern void lcd1602_show_string(uint8_t x, uint8_t y, uint8_t *str); extern void lcd1602_show_char(uint8_t x, uint8_t y, uint8_t c); /* Private variables ---------------------------------------------------------*/ uint8_t runMode = 3; /* 0=?? 1=?? 2=?? 3=?? */ uint8_t carBodyState = 4; /* 0=? 2=? 3=? 4=?? */ uint8_t leftState = 0; uint8_t centreState = 0; uint8_t rightState = 0; static uint8_t wasTurning = 0; static uint8_t eventCount = 0; static uint8_t beepCooldown = 0; char showBuffer[32] = {0}; /* ? 50 ????,LCD ??? 16 ?? */ int distance = 0; uint32_t tick30ms = 0; /* ?? HAL ??? 30 ms ?? */ static uint8_t lastKey = 1; /* ??? --------------------------------------------------------------------*/ #define DISTANCE_THRESHOLD 60 #define HYBRID_DIST 30 /* ?????? gpio.h ??,?????,?????? */ #ifndef KEY_Pin #define KEY_Pin GPIO_PIN_0 #define KEY_GPIO_Port GPIOA #endif #ifndef IR_L_Pin #define IR_L_Pin GPIO_PIN_1 #define IR_L_GPIO_Port GPIOA #endif #ifndef IR_M_Pin #define IR_M_Pin GPIO_PIN_2 #define IR_M_GPIO_Port GPIOA #endif #ifndef IR_R_Pin #define IR_R_Pin GPIO_PIN_3 #define IR_R_GPIO_Port GPIOA #endif #ifndef BEEP_Pin #define BEEP_Pin GPIO_PIN_4 #define BEEP_GPIO_Port GPIOA #endif #ifndef LED_Pin #define LED_Pin GPIO_PIN_5 #define LED_GPIO_Port GPIOA #endif /* ???? */ #ifndef MOTOR_L_IN1_Pin #define MOTOR_L_IN1_Pin GPIO_PIN_0 #define MOTOR_L_IN1_GPIO_Port GPIOB #endif #ifndef MOTOR_L_IN2_Pin #define MOTOR_L_IN2_Pin GPIO_PIN_1 #define MOTOR_L_IN2_GPIO_Port GPIOB #endif #ifndef MOTOR_R_IN1_Pin #define MOTOR_R_IN1_Pin GPIO_PIN_2 #define MOTOR_R_IN1_GPIO_Port GPIOB #endif #ifndef MOTOR_R_IN2_Pin #define MOTOR_R_IN2_Pin GPIO_PIN_10 #define MOTOR_R_IN2_GPIO_Port GPIOB #endif /* ???? ------------------------------------------------------------------*/ void SystemClock_Config(void); void Error_Handler(void); void update_line_sensor_state(void); void patrol_mode(void); void obstacle_avoidance_mode(void); void hybrid_mode(void); void update_mode_display(void); void delay_ms(uint16_t ms); /* Weak ??,?????????? ------------------------------------------*/ __weak void lcd1602_init(void) { } __weak void lcd1602_show_string(uint8_t x, uint8_t y, uint8_t *str) { } __weak void lcd1602_show_char(uint8_t x, uint8_t y, uint8_t c) { } __weak void beep_once(void) { } __weak void beep_twice(void) { } __weak int get_distance(void) { return 45; } __weak void set_motor_speed(int l, int r) { (void)l; (void)r; } /* Main ?? -----------------------------------------------------------------*/ int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_TIM3_Init(); MX_USART1_UART_Init(); HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1); HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2); lcd1602_init(); lcd1602_show_string(0, 0, (uint8_t *)"Intelligence Car"); lcd1602_show_string(0, 1, (uint8_t *)"MS:TZMS JL:xxxCM"); /* ?? BEEP ????(? gpio.c ??????,???) */ __HAL_RCC_GPIOA_CLK_ENABLE(); GPIO_InitTypeDef gpio = {0}; gpio.Pin = BEEP_Pin; gpio.Mode = GPIO_MODE_OUTPUT_PP; gpio.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(BEEP_GPIO_Port, &gpio); while (1) { /* ???? */ uint8_t key = HAL_GPIO_ReadPin(KEY_GPIO_Port, KEY_Pin); if (lastKey == 1 && key == 0) { HAL_Delay(20); if (HAL_GPIO_ReadPin(KEY_GPIO_Port, KEY_Pin) == 0) { runMode = (runMode + 1) % 4; beep_once(); if (runMode == 3) set_motor_speed(0, 0); update_mode_display(); while (HAL_GPIO_ReadPin(KEY_GPIO_Port, KEY_Pin) == 0); } } lastKey = key; /* 30 ms ???? + LCD */ if (HAL_GetTick() - tick30ms > 30) { tick30ms = HAL_GetTick(); distance = get_distance(); if (distance > 999) distance = 999; lcd1602_show_char(11, 1, '0' + distance / 100); lcd1602_show_char(12, 1, '0' + (distance / 10) % 10); lcd1602_show_char(13, 1, '0' + distance % 10); } /* ????? */ update_line_sensor_state(); /* C/D ???? & ?? */ uint8_t turningNow = (carBodyState == 2 || carBodyState == 3); if (beepCooldown) beepCooldown--; if (!wasTurning && turningNow) { eventCount++; if (beepCooldown == 0) { beep_twice(); beepCooldown = 100; } } if (eventCount >= 2) eventCount = 0; wasTurning = turningNow; /* ???? */ switch (runMode) { case 0: patrol_mode(); break; case 1: obstacle_avoidance_mode(); break; case 2: hybrid_mode(); break; default: set_motor_speed(0, 0); break; } HAL_Delay(1); /* 1 kHz ??? */ } } /* ??????? -----------------------------------------------------------*/ void update_line_sensor_state(void) { leftState = HAL_GPIO_ReadPin(IR_L_GPIO_Port, IR_L_Pin); centreState = HAL_GPIO_ReadPin(IR_M_GPIO_Port, IR_M_Pin); rightState = HAL_GPIO_ReadPin(IR_R_GPIO_Port, IR_R_Pin); if (centreState) carBodyState = 0; /* ?? */ else if (leftState && !rightState) carBodyState = 2; /* ?? */ else if (!leftState && rightState) carBodyState = 3; /* ?? */ else carBodyState = 0; /* ???? */ } /* ????? ---------------------------------------------------------------*/ void patrol_mode(void) { switch (carBodyState) { case 0: set_motor_speed(800, 800); break; case 2: set_motor_speed(400, 700); break; case 3: set_motor_speed(700, 400); break; default: set_motor_speed(0, 0); break; } } void obstacle_avoidance_mode(void) { if (get_distance() < DISTANCE_THRESHOLD) { beep_once(); set_motor_speed(0, 0); HAL_Delay(200); set_motor_speed(-500, 500); HAL_Delay(300); set_motor_speed(600, 600); HAL_Delay(600); set_motor_speed(500, -500); HAL_Delay(300); while (get_distance() < DISTANCE_THRESHOLD) { set_motor_speed(500, 500); HAL_Delay(100); } beep_once(); } else set_motor_speed(600, 600); } void hybrid_mode(void) { if (get_distance() < HYBRID_DIST) { beep_once(); set_motor_speed(0, 0); HAL_Delay(300); set_motor_speed(-500, 500); HAL_Delay(400); set_motor_speed(600, 600); HAL_Delay(1000); set_motor_speed(500, -500); HAL_Delay(150); while (!leftState && !rightState) { update_line_sensor_state(); set_motor_speed(500, 500); HAL_Delay(80); } beep_once(); } else patrol_mode(); } /* ?????? -------------------------------------------------------------*/ void update_mode_display(void) { /* ??? 16 ???? */ snprintf(showBuffer, sizeof(showBuffer), "MS:%c%cMS JL:%03dCM", runMode == 0 ? 'X' : (runMode == 1 ? 'B' : (runMode == 2 ? 'X' : 'T')), runMode == 0 ? 'X' : (runMode == 1 ? 'Z' : (runMode == 2 ? 'B' : 'Z')), distance); lcd1602_show_string(0, 1, (uint8_t *)showBuffer); } /* ????(Cube ?????) ----------------------------------------------*/ void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; /** Initializes the RCC Oscillators according to the specified parameters * in the RCC_OscInitTypeDef structure. */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); } /** Initializes the CPU, AHB and APB buses clocks */ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; if(HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) { Error_Handler(); } } /* ???? ------------------------------------------------------------------*/ void Error_Handler(void) { __disable_irq(); while (1) { HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); HAL_Delay(200); } }不行,运行的不顺利,有更好的版本吗
12-01
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值