Arduino F103C8T6 (BluePill) 教程三教你使用COM口通信之下位机

Arduino F103C8T6 (BluePill) 教程三教你使用COM口与上位机通信之下位机

感谢CSDN前人教会我们用撸Arduino的方法撸STM32F103,作者最近在帮公司做项目预算有限,采用某宝13元的Blue Pill开发,很多代码直接拿Arduino UNO的来用,考虑好久,还是决定写一些Arduino BluePill的教程,只为方便以后方便调用.
附图 某宝的Blue Pill
废话不多说,直接上代码:

void setup()
 {

    Serial.begin(9600); //打开串口并设置波特率为9600
}

void loop()
{
   	 int val;  //定义整形变量val
    val = Serial.read();//读取输入的数据,并赋值给变量val
    
    if(val == 'A')  //判断输入的数据是否为A
            Serial.println("HELLO!");
    if(val == 'B')
            Serial.println("你好!");
}

代码说明:本代码摘自"零知实验室",引用链接如下:http://www.lingzhilab.com/forum.php?mod=viewthread&tid=74&extra=page%3D2

串口波特率默认9600,关于此代码拓展如下:

1.串口字符捕获,根据捕获字符不同,执行不同指令,比如一个主控 控制多个舵机

2.作为电脑下位机,与上位机特征通信,比如:控制步进电机正反转:

 #include<Stepper.h>
String comdata = "";
long int i;

	// 这里设置步进电机旋转一圈是多少步

#define STEPS 256

Stepper stepper(STEPS, PB12, PB13, PB14, PB15);

void setup()
{
stepper.setSpeed(64); // 设置转速,单位r/min

Serial.begin(9600);
}
void loop()
{
while (Serial.available() > 0)  
{
    comdata += char(Serial.read());
    delay(2);
}
if (comdata.length() > 0)
{
    Serial.println(comdata);
    if (comdata.substring(0,2)=="M+")   //判定是否对电机操作
    {
      comdata= comdata.substring(2,8); //截取6位8位机运算用
      i=comdata.toInt();                //转换6位字符为i
      stepper.step(i);                 //顺时针旋转i步
      Serial.println(i);
      
       //官方自带驱动Bug,执行完必须置低,否则电机将生热
       
      digitalWrite(PB12,LOW);  
      digitalWrite(PB13,LOW);
      digitalWrite(PB14,LOW);
      digitalWrite(PB15,LOW); 
      
      delay(200);                       //等待0.2秒
      }
     if (comdata.substring(0,2)=="M-") //判定是否对电机操作
    {
      comdata= comdata.substring(2,8); //截取6位
      i=comdata.toInt();              //转换6位字符为i
      stepper.step(-i);                 //逆时针旋转i步
      Serial.println(-i); 
         
       //官方自带驱动Bug,执行完必须置低,否则电机将生热
         
      digitalWrite(PB12,LOW);
      digitalWrite(PB13,LOW);
      digitalWrite(PB14,LOW);
      digitalWrite(PB15,LOW); 
      delay(200);   
      }
     if (comdata.substring(0,2)=="ST") //判定是否对电机操作
    {
      i=2048;
      Serial.println(i);
      stepper.step(i);                 //顺时针旋转i步
      
       //官方自带驱动Bug,执行完必须置低,否则电机将生热
      digitalWrite(PB12,LOW);
      digitalWrite(PB13,LOW);
      digitalWrite(PB14,LOW);
      digitalWrite(PB15,LOW); 
      
      delay(200); 
      Serial.println(-i); 
      stepper.step(-i);                 //逆时针旋转i步 
      
      //官方自带驱动Bug,执行完必须置低,否则电机将生热  
         
      digitalWrite(PB12,LOW);
      digitalWrite(PB13,LOW);
      digitalWrite(PB14,LOW);
      digitalWrite(PB15,LOW); 
      delay(200); 
      }
    i = 0;
    comdata = "";
}
}

以上代码实现串口输入“M+x”实现马达顺时针转动x步,输入"M-x"实现马达逆时针旋转x步 其中"x"为具体数值,比如10,100,1000,等,串口接收到"ST"先顺时针旋转2048步,再逆时针旋转2048步结束.
作者代码能力一般,本着一抄二学三创造的思想希望得到大家的鼓励,将自己的更多的代码源程序跟大家一起分享。

猜你喜欢

转载自blog.csdn.net/leotian966/article/details/103092145