1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
Arduino F103C8T6 (BluePill) 教程三教你使用COM口与上位机通信之下位机
感谢CSDN前人教会我们用撸Arduino的方法撸STM32F103,作者最近在帮公司做项目预算有限,采用某宝13元的Blue Pill开发,很多代码直接拿Arduino UNO的来用,考虑好久,还是决定写一些Arduino BluePill的教程,只为方便以后方便调用. 最近在做基于STM32duino 串口通信时直接翻车,原因是串口无法输出,后来百度了下都说STM32duino 串口UART通信是个坑,官方也未解决, 经笔者验证,官方库有这么大Bug,怎么可能? 后来在做串口通信时不想用ST-Link烧写了,直接跳 Boot0 线帽吧,发现串口居然OK了!之前使用的库是 Maple mini提供的,Maple mini可以使用bootloader进行升级,而Bootloader是将USB接口虚拟成了串口,这个就是问题所在了,不是没有串口,而是官方是通过USB(PA11,PA12虚拟的),所以,如果想用串口,建议使用串口烧录,而不是Bootloader或者ST-Link。 上代码: 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("你好!"); } 串口波特率默认9600,关于此代码拓展如下: 1.串口字符捕获,根据捕获字符不同,执行不同指令,比如一个主控 控制多个舵机 2.作为电脑下位机,与上位机特征通信,比如:控制步进电机正反转: #include 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步结束。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1777 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1621 浏览 1 评论
1080 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
728 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1678 浏览 2 评论
1937浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
731浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
570浏览 3评论
595浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
554浏览 3评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 02:07 , Processed in 0.867639 second(s), Total 76, Slave 60 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号