你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

成功移植STM32 Nucleo到Arduino  

[复制链接]
qianfan 发布时间:2015-1-13 13:35
本帖最后由 QianFan 于 2015-1-16 21:56 编辑
% K6 N! p3 J9 O& o) K# s3 |0 ~$ H: y  R+ U4 \  d! G- x: u% S
今天成功的移植了F072 Nucleo到Arduino,特发帖嘚瑟一下。请看大图:0 u$ Y& b+ b8 B# q$ E( I
" }9 |" N  R5 q7 `5 K; |) q5 v
目前的功能还是很简单,只是简单的实现了Arduino控制IO接口的函数。实现了下面的几条函数digitalWrite,digitalRead,pinMode,另外,为了方便大家使用,我在Arduino的基础上增加了一个函数toggleDigital,用于翻转IO接口。
* d2 s. {9 D  o. t; F0 P# v- j+ O8 X/ _  q" L$ q
/ v* z* w$ z. v; y
程序在开始的时候使能了systick,配置成为1ms中断一次。这样,我们就能够使用delay就行延时了。
- o' j+ P6 ?8 ]; v0 U: h' \+ a2 r5 l/ |* s; c

* s( J0 c. l4 _" J1 x; I代码使用arm gcc进行编译。在整个移植的过程中,最重要的就是Arduino中platforms.txt文件的编写。这个文件的作用最大了,类似于gcc中的makefile。这个文件关系到函数是如何编译的,生成什么样的文件(hex or bin)使用什么下载工具,下载工具的命令行是什么。由于Nucleo板子上面自带ST-LINK,所以当然是使用ST-LINK下载。但是似乎是现在移植的一个难题,因为Arduino在进行下载的时候,是需要确定你的串口是存在的。似乎所有的Arduino都是使用串口进行下载。所以,如果没有串口的话,是无法下载的。幸好我们的Nucleo板子上是有一个串口的,用这个串口可以临时的欺骗一下Arduino,但也不是长久之计。我们正在寻找一个解决方案。看能不能很好的解决这一个下载问题。
/ K7 D( o. g2 v& U. m! F9 Z' W7 ^! W4 _

* F  Z- p' y( z6 ?不知道大家对Arduino的感觉如何,前几天我发起了一个帖子,询问大家对Arduino的看法,感觉大家还是对这个东西不是很感兴趣。4 L# N6 k# [0 o& H6 u
好了,不多少了,大家还是看图说话吧。过几天之后,完善一下代码,作为一个附件上传上来供大家评测。如果大家感兴趣的话,会写一系列的教程贴,供大家从0开始移植Arduino。

digital

digital
8 m$ f* S; ?  A2 k; O
* m$ F1 o8 p- F  I' y/ N

" [! m; {, }& K- s! q                                                              [Arduino移植第二幕:成功移植Serial ]2 T* i; L- e( h. s+ c" X
Nucleo中有四个串口,所以这次移植Serial的时候,将这四个串口都写进去了,分别是Serial,Serial2,Serial3,Serial4,直接发送,中断接收。测试之后,四个串口均可用。比较欣喜的是Nucleo自带了USB转串口,很方便我们使用。% X; x2 m' `3 m& W5 C, s
下面是4个串口的引脚:
+ s3 R% U3 N4 W9 T* O; U% i9 J" vPA0<-->USART4_TX       PA1<-->USART4_RX& H8 x1 ^' ~  u
PA2<-->USART2_TX       PA3<-->USART2_RX) p8 x% g1 }5 y6 [7 q9 f, t2 V* h
PA9<-->USART1_TX       PA10<->USART1_RX
) t; Q$ h- B1 }: H; gPC10<->USART3_TX       PC11<->USART3_RX& a/ G- e# S! e; F3 d+ E# C
. U  V" a) o* B; e& M; p

' o8 G" ^& w8 X+ L2 y下面是截图:
$ C9 X6 z5 Q+ X0 _- U
. R& y) R1 |! A% [# V, C
  r& ~  ^! I3 N9 O: a7 w) a

Serial。

Serial。
6 k0 Z9 A" {/ y8 g9 D+ u5 E6 V

! Q, W2 c. U* B+ U: K
' X8 j& E1 |& G4 W# k+ m' B                                                      【Arduino移植第三幕:成功移植AD转换部分】
5 d9 p7 s# s0 B) u3 p# C今晚成功移植analogRead这个函数,能够通过内置的AD读取端口的电平值。不过操作流程和arduino原生的有点出入。如果使用Arduino原生的,貌似是不需要设置IO端口的状态。但是我移植的需要提前将IO端口设置成为ANALOG状态。
; O/ c: y. U! C4 `+ j  \. |$ G  Q" k4 O6 ]8 T1 a6 U4 |
在移植的时候也好好地想过这个事情。其实移植的时候完全可以根据Arduino的操作流程来处理。只要在每次analogRead的时候都设置一次IO接口的状态为模拟就行,但是这样毕竟做了很多无用功。特别是当你在一个循环中连续读取模拟口的电平值的时候,每次都设置一个确实是一种浪费。因此我没有这样做。只是在程序开始的地方,我的建议是在setup中设置你需要读取的引脚是ANALOG(使用pinMode函数,在Arduino原生的基础上增加了ANALOG这一状态)。
) {4 p7 p1 u: p0 @4 S1 ~# s* x3 d0 U3 E# Z: {; i' V, r% m8 l
下面是我的一张截图。将AD转换通道的数据读入,并且通过串口Serial进行发送。串口监视器中的数据一开始是接在3.3V上面,然后我把线拔下来,悬空了一会,然后把线放到了GND上数据的变化。请看图。. [& ]8 v" p1 T( S% O

analogRead

analogRead

* ]/ U5 b* W9 r4 L+ h# C
3 r0 ^: U9 ~* Y& F
赞 收藏 3 评论39 发布时间:2015-1-13 13:35

举报

39个回答
qianfan 回答时间:2015-1-14 20:06:12
shaoziyang 发表于 2015-1-13 21:11
3 f5 U  r* y5 U, W3 }: H支持楼主,等待可用的版本。

  P/ g6 C4 o$ J; A现在就我的一台电脑,不知道在其他的电脑上能不能行。因为我的编译器是安装版的,我直接将安装版安装后的exe程序拷贝到Arduino中,不知道换成其他的电脑行不行。1 S" N4 X% d* O) R  `/ J
现在还缺少电脑做测试。等在其他的电脑上面测试通过之后,就会上传可用的版本。
, L; b+ |8 d; A. P7 I$ h  m9 h" c
希望能帮助好好测试一下啊
qianfan 回答时间:2015-1-14 11:13:59
slotg 发表于 2015-1-13 22:39
0 Q! S* e& V! i; m) F: @/ }关注楼主的发展,我觉得Arduino是一个很伟大的开源板子,让很多人透过简易的编程方式实现自己的想法。 ...
/ t8 \) c! E% D) R
主要是他能降低开发的门槛。让更多的人学会使用
shaoziyang 回答时间:2015-1-14 21:18:54
QianFan 发表于 2015-1-14 20:06
$ o' B( i/ C) ^现在就我的一台电脑,不知道在其他的电脑上能不能行。因为我的编译器是安装版的,我直接将安装版安装后的 ...
; q8 n8 \! R, A: L8 {
我可以帮助测试。
qianfan 回答时间:2015-1-13 13:38:18
@沐紫 姐,您怎么看?
9 m: A" k* ?2 ^
shaoziyang 回答时间:2015-1-13 13:44:55
这个不错。MSP430 launchpad也有一个类似Arduino的东西:energia。
qianfan 回答时间:2015-1-13 17:25:27
shaoziyang 发表于 2015-1-13 13:449 w) z, U6 |4 Q6 k8 w
这个不错。MSP430 launchpad也有一个类似Arduino的东西:energia。
" k- h0 t( ~3 w  w+ @. F0 E/ `
这个是直接使用Arduino的IDE
shaoziyang 回答时间:2015-1-13 21:11:43
QianFan 发表于 2015-1-13 17:25& N4 p- m- E, `2 E
这个是直接使用Arduino的IDE
+ |  j8 T( ?# i6 |3 e7 K2 e
支持楼主,等待可用的版本。
slotg 回答时间:2015-1-13 22:39:25
关注楼主的发展,我觉得Arduino是一个很伟大的开源板子,让很多人透过简易的编程方式实现自己的想法。
mlxy123xy 回答时间:2015-1-14 00:18:34
其实用什么实现不是最重要的,最重要的是有想法,然后用最简单的方式实现了。
qianfan 回答时间:2015-1-14 11:13:29
shaoziyang 发表于 2015-1-13 21:11
, x: U1 L- _6 x4 ~支持楼主,等待可用的版本。

/ h6 c+ {* }9 X% `& X0 w9 z正在努力敲程序中。。。
晓枫VS枯叶 回答时间:2015-1-14 12:26:01
楼主可以发个移植教程!
qianfan 回答时间:2015-1-14 12:28:23
晓枫VS枯叶 发表于 2015-1-14 12:26
7 D) v1 L* \2 `4 j9 a" \" F- d  w$ E楼主可以发个移植教程!
  h. a, r# N# r1 M
等程序写得差不多,显下来着。。。
qianfan 回答时间:2015-1-14 20:02:38
人工置顶,哈哈哈
qianfan 回答时间:2015-1-14 20:07:39
晓枫VS枯叶 发表于 2015-1-14 12:260 O& t3 v. _1 t& @! V& H
楼主可以发个移植教程!

/ j! H1 |' O( J7 h教程是肯定会有有的
MouseCat 回答时间:2015-1-14 20:10:52
全部传上来,资料
123下一页

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版