Arduino F103C8T6 (BluePill) 教程三教你使用COM口与上位机通信之下位机
感谢CSDN前人教会我们用撸Arduino的方法撸STM32F103,作者最近在帮公司做项目预算有限,采用某宝13元的Blue Pill开发,很多代码直接拿Arduino UNO的来用,考虑好久,还是决定写一些Arduino BluePill的教程,只为方便以后方便调用.
废话不多说,直接上代码:
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步结束.
作者代码能力一般,本着一抄二学三创造的思想希望得到大家的鼓励,将自己的更多的代码源程序跟大家一起分享。