查看: 5818|回复: 6

基于stm32f103c8t6的Arduino系统

[复制链接]

该用户从未签到

发表于 2019-3-13 15:09 | 显示全部楼层 |阅读模式
本帖最后由 zhuhai 于 2019-3-15 13:56 编辑

基于stm32f103c8t6的Arduino系统

为了小目标的实现,使用ATMEGA328P和Leana都无法完整接收OneNet返回的信息(近300个字符),最终将目标定在了stm32f103c8t6上,选上它是因为这块板子有三个硬串,而且价格只有几元,所以买来试试,居然成功了,总结本文方便需要者参考。

下图是新买的一块stm32f103c8t6,外观尺寸22mmX52mm

1.png


第一步、软件准备:
下面地址下载开发板软件:
https://github.com/rogerclarkmelbourne/Arduino_STM32
得压缩包Arduino_STM32-master.zap
解压后保存到Arduino安装目录下D:\ProgramFiles (x86)\Arduino\hardware

12.png
打开工具\开发板管理器,然后再安装开发板包
2.png
以上是二套软件安装。

重启Arduino后可以看到多了主板选项
3.png

第二步、硬件连接
下图接TTL
4.png
stm32f103c8t6三个串口如下表,都可以接TTL,其它脚位分布参考百度文库
https://wenku.baidu.com/view/8412fbc0dd88d0d232d46a48.html

14.JPG

第三步、上传代码测试

开发板选项参考下图
5.png
收到板子后,通电,PC13灯一闪一闪的,这是商家已写入的测试程序,我们不需要。
BOOT0的跳线设置为1,通电按下RESET清空闪存,这一步需要,否则象没写似的。新板子第一次写时,按RESET没用。要先写再RESET再写,程序就写进去了,以后每次更新程序都先RESET再写。写完后带电状态将BOOT0的跳线设置为0,否则一掉电程序马上没了。

测试代码:
void setup() {
  //initialize digital pin LED_BUILTIN as an output.
pinMode(PC13, OUTPUT);
Serial.begin(9600);
}

// the loop function runs over and overagain forever
void loop() {
digitalWrite(PC13, HIGH);   //turn the LED on (HIGH is the voltage level)
delay(1000);                      // wait for a second
digitalWrite(PC13, LOW);    //turn the LED off by making the voltage LOW
delay(1000);                      // wait for a second
Serial.println("hello world");
delay(1000);                      // wait for a second

}

打开串口监视器,接收
6.png

Hello world收到了

关于编译器提示的问题,串口工具没有断开时上传,也是上传成功,但是实际是没有成功。
这个上传成功不能代表一定成功,即使你板子没有通电也是上传成功,所以每次上传都要关注一下接线情况,以免误解。
7.png

到此为止stm32f103c8t6板已成功运行arduino程序,接下来上传小目标代码,参考:
我的Arduino之路-实现物联网应用(4)
https://www.arduino.cn/forum.php?mod=viewthread&tid=84326&fromuid=166011

先改缓存文件
D:\Program Files(x86)\Arduino\hardware\arduino\avr\libraries\SoftwareSerial\src\ SoftwareSerial.h
修改内容:
8.png

经调试成功收到OneNet返回信息:
9.png

总结:
有些代码在stm32f103c8t6不能用,如:
resetFunc();函数会死机
while(Serial2.read()>= 0){};//缓存清零//也会引起死机
三个串口(Serial、Serial1、Serial2)只有二个串口有效(0和2)不知为什么
如:
接线(A9,A10):Serial.println("AT");有效
接线(A2,A3):Serial1.println("AT");无效,但是这样接线却对Serial2.println("AT");有效,真想不通
接线(B10,B11):Serial2.println("AT");有效

串口收到的缓存数据,不是超出丢弃式的,而是压入式的,后面的数据将前面的顶出去。这个对我有用,因为我要的数据在300多个字的最后几行

对中断不懂,STM32F103软复位没成功,只好用笨办法接个继电器做了个硬复位
接线图:
10.png


最后展示成果


参考文选(感谢作者的分享):
1)  【玩STM32】如何用arduino语法来玩STM32(一)
https://www.geek-workshop.com/thread-27452-1-1.html

2)    STM32F103 and Maple / Maple Mini with Arduino 1.5.x IDE
http://www.rogerclark.net/stm32f103-and-maple-maple-mini-with-arduino-1-5-x-ide/

15.JPG
  • TA的每日心情
    开心
    2019-12-11 10:34
  • 签到天数: 47 天

    [LV.5]常住居民I

    发表于 2019-3-30 23:15 来自手机 | 显示全部楼层
    太麻烦了,试试零知板,一键下载

    该用户从未签到

    发表于 2020-5-6 12:40 | 显示全部楼层
    零知实验室-roc 发表于 2019-3-30 23:15
    太麻烦了,试试零知板,一键下载

    零和开发板 BOOT1引脚有一颗10K的下拉电阻 不能刷入Flash。。。。。
    只能用零知官方的IDE  新人入门可以试试 不建议大家玩零知
  • TA的每日心情
    开心
    2020-6-4 13:14
  • 签到天数: 64 天

    [LV.6]常住居民II

    发表于 2020-6-4 13:36 | 显示全部楼层
    4760177 发表于 2020-5-6 12:40
    零和开发板 BOOT1引脚有一颗10K的下拉电阻 不能刷入Flash。。。。。
    只能用零知官方的IDE  新人入门可以 ...

    非常赞成你的说法,不通用的东西资源不开源,用着很麻烦,我也买了,因为不兼容我的装2套编译器,麻烦死了

    该用户从未签到

    发表于 2020-7-16 20:23 | 显示全部楼层
    按照您的说法试了一下F103C8T6, 结果得到"为开发板STM32F103C8T6编译出错".请问是什么原因?
  • TA的每日心情
    开心
    2020-8-11 08:39
  • 签到天数: 24 天

    [LV.4]偶尔看看III

    发表于 2020-7-17 09:36 | 显示全部楼层
    刚刚接触Arduino,学习了
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    热门推荐

    5分钟带你快速了解新一代开发板:M5STACK
    5分钟带你快速了解新一代
    一、什么是M5Stack M5Stack是一种模块化、可堆叠扩展的开发板,每个模块
    创客火首发无人机编队套装,开启不一样的人工智能教育
    创客火首发无人机编队套装
    2017年国务院发布《新一代人工智能发展规划》,提出要广泛开展人工智能科普活动,在中
    未见过的TFT屏,是什么驱动芯片?
    未见过的TFT屏,是什么驱
    这两块屏是从POS机里拆的,准备做几个锂电池组电压监测,在网上没找到资料,在这里问
    win10系统显示不出端口信息,编译后显示serial port not selected。
    win10系统显示不出端口信
    求各位哥哥帮忙,小兄弟实在不懂是win10系统的原因,还是需要安装什么驱动程式?具体
    更智能的电脑远程开关机-基于继电器
    更智能的电脑远程开关机-
    我只是刚刚入门的萌新,所以有不足请指出 先展示下 功能:开关机,开关机检测,
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表