8637|12

1万

帖子

24

TA的资源

版主

楼主
 

【sensorTile】使用Mbed进行程序开发的问题及解决 [复制链接]

 
 
这段时间研究了使用Mbed开发SensorTile,结果一开始的闪灯程序就遇到问题,程序没有变化。经过一段时间的研究,终于发现并解决了问题。我把解决问题的大致步骤写出来,给大家参考一下。




SensorTile使用了STM32L476JG,它不在Mbed直接支持的芯片中(Mbed支持STM32L476VG和STM32L476RG,没有直接支持STM32L476JG)。

因为STM32L476JG和STM32L476VG/STM32L476RG差别很小,除了封装不同,在就是GPIO有少量不同,STM32L476JG多出了PORTG。按照以前的经验,STM32L476VG/STM32L476RG的程序应该是可以直接运行在STM32L476JG上。于是用NUCLEO_L476RG模板,写了一个LED的闪灯程序,结果编译出错,提示PG_12没有定义。

  1. #include "mbed.h"

  2. DigitalOut LED(PG_12);

  3. int main()
  4. {   
  5.     while(1)
  6.     {
  7.         LED = 0;
  8.         wait(0.1);
  9.         LED = 1;
  10.         wait(0.1);
  11.     }
  12. }
复制代码

检查了源码,发现PinNames.h和PortNames.h中没有PORTG的定义。于是手工添加了PORTG的定义到PinNames.h和PortNames.h中,这次可以编译通过了。但是程序下载后没有任何反应,于是就想把程序导出来进行仿真。程序导出很方便,但是发现NUCLEO_L476RG导出的程序不完整,在online IDE中编译很正常,在KEIL中提示缺少objects.h,从github的mbed源码中找到这个文件并加入,还是不行,缺少更多的文件,经过多次尝试都是这样,看来是NUCLEO_L476RG的程序库有问题。后来发现使用STM32L476_DISCO模板建立的程序,导出后是完整的,可以在Keil中仿真,这次发现PORTG相关的寄存器被被设置,所以LED不亮。

进一步仿真就需要查看程序源码了,而STM32L476_DISCO模块提供了很多文件是obj格式的,带来不便。先是在online IDE中将mbed库删除,导入mbed-dev,结果这样就无法导出程序了,这好像是online IDE有限制。最后回到开始的STM32L476_DISCO模板程序,将obj文件删除,然后从mbed源码中找到对应文件的C/CPP文件,并加入到项目文件。因为这段时间出了一些意外,时间有些少,所以花费N天才完成这一工作,终于可以深入源码查找问题了。

最后发现,在pinmap.c中,函数uint32_t Set_GPIO_Clock(uint32_t port_idx)中缺少了PORTG的代码,于是仿照上下相关部分代码,添加了PORTG的部分。

  1. #if defined(GPIOG_BASE)
  2.         case PortG:
  3.             gpio_add = GPIOG_BASE;
  4.             __HAL_RCC_GPIOG_CLK_ENABLE();
  5.             break;
  6. #endif
复制代码

回到前面的blinky闪灯程序,发现LED还是没有变化。进入仿真模式,并参考了CubuMX产生的代码,发现还需要设置PWR_CR2。再次修改uint32_t Set_GPIO_Clock(uint32_t port_idx)函数:

  1. #if defined(GPIOG_BASE)
  2.         case PortG:
  3.             gpio_add = GPIOG_BASE;
  4.             __HAL_RCC_SYSCFG_CLK_ENABLE();
  5.             __HAL_RCC_PWR_CLK_ENABLE();
  6.             __HAL_RCC_GPIOG_CLK_ENABLE();
  7.             HAL_PWREx_EnableVddIO2();
  8.             break;
  9. #endif
复制代码

修改后,LED终于开始闪了。

修改后的SensorTile Mbed程序,目前只修改了GPIO部分,GPIOG对应的外设部分还没有修改,等进行到下一步后在说了。
SensorTileTest.zip (2.31 MB, 下载次数: 43)

最新回复

原计划也用mbed。不过以后不会支持L476YG的,这个板子和nucleo的L476RG是不同的,YG的GPIO更多,但是mbedOS是不开源的,所以用起来没有想象中那么快捷。不如直接找到寄存器去读写。 需要指出的是L476比F4系列其实是更强的,主频降了但是性能降低有限,低功耗增强了。但是代码和手册都是同一份。  详情 回复 发表于 2017-2-8 11:32
点赞 关注(1)
 
 

回复
举报

6040

帖子

195

TA的资源

版主

沙发
 
楼主高人,学习了!
 
 
 

回复

9795

帖子

24

TA的资源

版主

板凳
 
D大神
Mbed未来会支持SensorTile的传感器吗

点评

这个不知道,不知道ST是否有这个计划。估计自己实现也不难。就是它的SPI使用三线方式,mbed目前只支持4线方式。  详情 回复 发表于 2017-1-3 22:56
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

4
 
这个号啊
 
 
 

回复

1461

帖子

1

TA的资源

纯净的硅(中级)

5
 
mbed好,就是天朝用起来太慢了

点评

的确,特别是CLI方式,需要通过github,速度实在太慢了。  详情 回复 发表于 2017-1-3 22:57
 
 
 

回复

1万

帖子

24

TA的资源

版主

6
 
littleshrimp 发表于 2017-1-3 00:20
D大神
Mbed未来会支持SensorTile的传感器吗

这个不知道,不知道ST是否有这个计划。估计自己实现也不难。就是它的SPI使用三线方式,mbed目前只支持4线方式。
 
 
 

回复

1万

帖子

24

TA的资源

版主

7
 
shihuntaotie 发表于 2017-1-3 20:42
mbed好,就是天朝用起来太慢了

的确,特别是CLI方式,需要通过github,速度实在太慢了。
 
 
 

回复

1301

帖子

0

TA的资源

纯净的硅(中级)

8
 
楼主,新年好,这个灯是蓝牙核心板上的灯吗?
原理图有两个灯,一个是sd卡灯引脚PG12,一个是调试引脚swdclk灯。谢谢。

点评

这个LED是PG12,在核心板上。  详情 回复 发表于 2017-2-3 20:43
个人签名

 

 

 
 
 

回复

1万

帖子

24

TA的资源

版主

9
 
大秦正声 发表于 2017-2-3 17:11
楼主,新年好,这个灯是蓝牙核心板上的灯吗?
原理图有两个灯,一个是sd卡灯引脚PG12,一个是调试引脚swdc ...

这个LED是PG12,在核心板上。
 
 
 

回复

1301

帖子

0

TA的资源

纯净的硅(中级)

10
 
仔细查看官方例程和手册,我用寄存器操作点灯成功。
低功耗的型号和传统m3,m4核有点区别的。

点评

=的确有不少区别,但功能更强了。特别是L4的自动频率校正功能很方便,用32K晶体就可以满足USB时钟的要求。  详情 回复 发表于 2017-2-5 15:54
个人签名

 

 

 
 
 

回复

1万

帖子

24

TA的资源

版主

11
 
大秦正声 发表于 2017-2-5 11:27
仔细查看官方例程和手册,我用寄存器操作点灯成功。
低功耗的型号和传统m3,m4核有点区别的。

=的确有不少区别,但功能更强了。特别是L4的自动频率校正功能很方便,用32K晶体就可以满足USB时钟的要求。
 
 
 

回复

359

帖子

9

TA的资源

一粒金砂(高级)

12
 
原计划也用mbed。不过以后不会支持L476YG的,这个板子和nucleo的L476RG是不同的,YG的GPIO更多,但是mbedOS是不开源的,所以用起来没有想象中那么快捷。不如直接找到寄存器去读写。
需要指出的是L476比F4系列其实是更强的,主频降了但是性能降低有限,低功耗增强了。但是代码和手册都是同一份。

点评

mbed是开源的吧,代码都在github上  详情 回复 发表于 2017-2-8 14:55
 
 
 

回复

1万

帖子

24

TA的资源

版主

13
 
fyaocn 发表于 2017-2-8 11:32
原计划也用mbed。不过以后不会支持L476YG的,这个板子和nucleo的L476RG是不同的,YG的GPIO更多,但是mbedOS ...

mbed是开源的吧,代码都在github上
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表