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

[Nucleo 开发日志 ] + 最新的Nucleo-F091RC 例程大放送(1)  

[复制链接]
harvardx 发布时间:2015-1-24 14:27
本帖最后由 harvardx 于 2015-1-24 21:52 编辑

1 前言
     
    友情链接: 沐紫妹妹关于最新Nucleo - F091RC开发板介绍以及相关的nucleo介绍
  Nucleo平台最新开发利器——ST Nucleo-F091RC开发板评测
https://www.stmcu.org.cn/module/forum/forum.php?mod=viewthread&tid=599462&fromuid=2039986





    ST的上新速度真够快的,如果是一个淘宝店铺,肯定是钻石带星的. 这不, STM32F091RC -nucleo 开发板又来到了我们的身边! Nucleo家族又迎来了一批新成员, 像咱们社区刚刚提供给大家的STM32f334- Nucleo 开发板. st的技术更新让我们应接不暇, 可以更加天马行空的选择自己的MCU right.拿到最新的STM32F091RC -nucleo 开发板.老规矩,先评测几个简单的例程. led_toggle,  key, ADC ,DAC神马的 ,几种开发方法,大家估计都耳熟能详了. 这就是Nucleo的好处. 统一的外形,统一的包装,统一的开发方法. 真正做到了 All in one,大家所需要关心的就是自己想要实现什么应用,做些什么,底层的细节, 驱动,io分频神马的 ,都可以直接套用. 如果你要 Hello world一下,在nucleo开发板上仅仅需要, 选择不同的mcu编译就可以了.


2 回顾    


  简单回顾一下, nucleo系列的几种开发方法,以最新的Nucleo 091开发板为例:

   1. nucleo 091 可以mbed开发,比较新颖, 也比较简单, 但是是cpp的, 可能很多同学太适应; 目前mbed.org已经有091系列的支持,大家可以登录mbed云端查看;


   2,标准外设库,目前标准已经到了1.5.0版本, 可以到此下载:
    下载地址:
     http://www.st.com/st-web-ui/stat ... 0_stdperiph_lib.zip  
     标准库解压后,有很多例程,其中包含了091的 ,可以到STM32F0xx_StdPeriph_Lib_V1.5.0\Projects\STM32F0xx_StdPeriph_Examples

目录下查看,怎么使用这些例程呢, 在里面的Libary_examples.html网页有说明,如下:
How to proceed?
  • Copy the files main.c, main.h (if exists), stm32f0xx_it.c, system_stm32f0xx.c, stm32f0xx_it.h, stm32f0xx_conf.h and any other source files from the specified example to your toolchain folder under Projects\STM32F0xx_StdPeriph_Templates. This project folder contains already all toolchain files needed for creating projects for STM32F0xx microcontrollers.
  • 1 拷贝某个外设例程文件夹里的main.c main.h stm32f0xx_it.c, system_stm32f0xx.c, stm32f0xx_it.h, stm32f0xx_conf.h等源码文件 到MDK工程文件所在的 Projects\STM32F0xx_StdPeriph_Templates文件夹下面,,

  • Open your preferred toolchain
  • 2 打开MDK

  • If needed, add in the project list the additional files required to run the example (refer to your example readme file)
  • 3 如果,有错误,可以按照提示,添加额外的支持文件,具体可以参读readme文件

  • Rebuild all files and load your image into target memory
  • 4 重新编译,加载印象文件到单片机

  • Run the example
  • 5 运行例程


   
  
  3  Cubemx库,这是目前st比较推崇的. 目前pc配置软件CubeMx已经到了最新的4.6.0版本
     下载地址:
( http://www.st.com/st-web-ui/stat ... ite/stm32cubemx.zip),
     同样支持F0的cube外设库CubeF0已经是1.2.0版本
     下载地址:
(http://www.st.com/st-web-ui/stat ... are/stm32cubef0.zip)

其实Cube终究也是库,只不过代表着更加先进的方案,相信在st巡回研讨会上大家都有所了解.记得很多工程师刚开始不太适应,其实是更加方便我们开发,至少他可以通过图形化,来快速配置我们单片机.生成所需要的模块初始化或者操作代码.


3  CubeMx结合CubeF0_V1.2.0 库 开发 Nucleo -STM32F091 开发板实例


    因为 091比较新,在keil4下,需要添加官方的dfp支持包, 否则将看不到这些器件. keil5就好办多了. 可以通过pack installer来进行. 这是在开发st最新单片机时,需要面临的问题,具有共性. 一般情况下,如果库(标准外设库或者cube库)出来了.可以在STM32F0xx_StdPeriph_Lib_V1.5.0\Utilities\Third_Party这样类似的目录下.找到这些支持包.
标准库1.5.0下的例程很多还是uv4工程的, 最新的\STM32Cube\Repository\STM32Cube_FW_F0_V1.2.0\Projects\STM32F091RC-Nucleo\Examples\里面的例程好多已经是MKD5工程了,非常好.免除了同学们添加支持器件的麻烦,直接通过更新pack intaller就搞定.而且无需去复制模版到每个驱动模块的例程,在外设驱动模块的例程中,已经帮我们添加好了工程.直接用mdk5打开就可以.建议大家升级到最新的MDK513测试,感觉很好.    首先上一个最简单的例程,
Nucelo_091_ledtoggle.zip (4.97 MB, 下载次数: 1031)
收藏 6 评论47 发布时间:2015-1-24 14:27

举报

47个回答
123tango 回答时间:2015-2-12 13:11:49
手上也有一块091,学习了
harvardx 回答时间:2015-1-24 22:45:10
插播一下啊, 关于mbed来开发nucleo 091的基础知识补充.什么是mbed, 大家可以去 mbed中国 了解详情:

关于例程中的ticker 其实就是定时器,大家可以看下面的详细说明:
mbed 时钟系统

微处理器的大量应用都和时间相关,如我们前面代码中多次出现的wait函数就是最常用的时间等待函数,显然,精确的时间等待必须建立在精确的计时技术上,这就需要用到计数器系统。

计数器的工作原理非常简单,就是每当它接收到一个脉冲时,它的计数值加一,一旦它的计数值达到用户设定的阈值,计数器就会产生一个中断信号让系统处理并重新从0开始计数。根据计数器可设定阈值的大小,我们可以把计数器分成8位计数器,16位计数器等,8位计数器可设定的最大阈值为2^8-1即255,16位则为65535。如果我们给定的脉冲信号频率为1M,而给定的计数器阈值为0,那么计数器就会每1us产生1个中断信号,这就为系统计时产生了依据。对于xbed LPC1768来说,它有四个通用计时器,它们可以用来计时、PWM输出等。



除了wait相关的等待函数以外,mbed还提供了三个对象用来完成和时间相关的功能,分别是Timeout,用来在给定的时间执行特定函数;Ticker,用来定时执行特定函数;Timer,用来给系统计时,它们可用的方法描述如下:

类名

方法

用途

Timer

Timer();

构造函数,实例化Timer对象

void start();

开始计时

void stop();

停止计时

void reset();

重新计时,即把时间计数恢复从0,如果原来处于start状态,那么计时继续

float read();

读取计时开始后过去的时间,单位是秒

int read_ms();

读取计时开始后过去的时间,单位是毫秒

int read_us();

读取计时开始后过去的时间,单位是微秒

operator float();

操作符重载,相当于read

Ticker

Ticker();

构造函数,实例化Ticker对象

void attach(void (*fptr)(void), float t)

设定每t秒需要执行的函数

void attach_us(void (*fptr)(void), unsigned int t)

设定每t微秒需要执行的函数

void detach();

取消本对象需要定时执行的函数

Timeout

Timeout();

构造函数,实例化Timeout对象

void attach(void (*fptr)(void), float t)

设定t秒后需要执行的函数

void attach_us(void (*fptr)(void), unsigned int t)

设定t微秒后需要执行的函数

void detach();

取消本对象需要执行的函数

mbed Timer的应用

mbed的Timer对象主要用来计算用户关心的时间间隔,下面是一个简单的示例,可以计算用户按下按钮的时间,主要代码如下:

Serial pc(USBTX,USBRX);

InterruptIn btn(P2_8);

Timer mytimer;

int falltime;

int risetime;

void fallfunc()

{

    falltime=mytimer.read_us();

}

void risefunc()

{

    risetime=mytimer.read_us();

    pc.printf("You press button for %d us \n",risetime-falltime);

}

int main() {

    mytimer.start();

    btn.fall(&fallfunc);

    btn.rise(&risefunc);

    while (1);



}

程序运行的结果如下,当然,我们需要理解,任何中断的处理都有一定的延迟时间,所以此结果还是会有一定的误差,但绝对在us级别。

You press button for 330410 us

You press button for 137603 us

You press button for 122679 us

You press button for 140683 us

有时候我们需要利用多个Timer来计算不同的时间,这只需要定义多个Timer对象即可:

Timer timer_led;

Timer timer_serial;

DigitalOut led1(LED1);

Serial pc(USBTX,USBRX);

void task_led(void)

{

    led1=!led1;

}

void task_serial(void)

{

    pc.printf("Timer passed %d ms \n",timer_serial.read_ms());

}

int main()

{

    timer_led.start();

    timer_serial.start();

    while (1)

    {

        if (timer_led.read()>0.5)

        {

            task_led();

            timer_led.reset();

        }

        if (timer_serial.read()>1)

        { //test Timer value

            task_serial();

            timer_serial.reset();

        }

    }



}

mbed Timeout的应用

mbed的Timeout对象主要用来在给定的时间后执行给定的函数,如下面的测试代码,运行后你会发现xbed LPC1768的四个led分别点亮,由于timeout只会被执行一次,所以点亮后会保持不变:

DigitalOut led1(LED1);

DigitalOut led2(LED2);

DigitalOut led3(LED3);

DigitalOut led4(LED4);

Timeout timer_led1;

Timeout timer_led2;

Timeout timer_led3;

Timeout timer_led4;

void led1flip()

{

    led1=!led1;

}

void led2flip()

{

    led2=!led2;

}

void led3flip()

{

    led3=!led3;

}

void led4flip()

{

    led4=!led4;

}

int main() {

    timer_led1.attach(&led1flip,0.5);

    timer_led2.attach(&led2flip,0.5*2);

    timer_led3.attach(&led3flip,0.5*4);

    timer_led4.attach(&led4flip,0.5*8);

    while (1);



}

mbed Ticker的应用

mbed的Ticker对象主要用来执行各类需要定期执行的函数,它和Timeout的唯一不同就是Timeout相关的函数只会被执行一次,而Ticker相关的则会被定期执行,如下面的测试代码,运行后你会发现xbed LPC1768的四个led将按照不同的频率变换:

DigitalOut led1(LED1);

DigitalOut led2(LED2);

DigitalOut led3(LED3);

DigitalOut led4(LED4);

Ticker timer_led1;

Ticker timer_led2;

Ticker timer_led3;

Ticker timer_led4;

void led1flip()

{

    led1=!led1;

}

void led2flip()

{

    led2=!led2;

}

void led3flip()

{

    led3=!led3;

}

void led4flip()

{

    led4=!led4;

}

int main() {

    timer_led1.attach(&led1flip,0.5);

    timer_led2.attach(&led2flip,0.5*2);

    timer_led3.attach(&led3flip,0.5*4);

    timer_led4.attach(&led4flip,0.5*8);

    while (1);



}

我们在使用Ticker对象的过程中还可以随时对Ticker设定的间隔进行更改,更改后的时间是即时生效的,如下面的代码,我们发现,用户每按一次按钮,led1的闪烁频率就会加快一倍。

DigitalOut led1(LED1);

InterruptIn btn(P2_8);

Ticker timer_led1;

float interval;

void led1flip()

{

    led1=!led1;

}

void changefred()

{

    interval=interval /2.0;

    timer_led1.attach(&led1flip,interval);

}

int main() {

    interval=2;

    btn.fall(&changefred);

    timer_led1.attach(&led1flip,interval);

    while (1);



}
hjl240 回答时间:2015-2-10 14:23:05
下载楼主的压缩包Nucelo_091_ledtoggle.zip后,压缩软件竟然打不开,提示: 1.png


那还得再下载个其他的压缩的软件,,比较麻烦。。。




建议楼主以后压缩的时候压缩成常见的压缩格式,,方便下载者




党国特派员 回答时间:2015-1-24 15:01:22
1.png
wamcncn 回答时间:2015-1-24 15:09:55
学习了一下,对CUBE还不是很了解,只能点个小灯啊什么的,项目配置不出来
harvardx 回答时间:2015-1-24 15:31:55
把他当标准库用也可以的
wyxy163@126.com 回答时间:2015-1-24 16:43:17
提示: 作者被禁止或删除 内容自动屏蔽
lkl0305 回答时间:2015-1-24 17:41:12
学习了
harvardx 回答时间:2015-1-24 19:21:04
数码小叶 发表于 2015-1-24 16:43
072的标准库历程我都没找到

有的 .下载最新的F0_1.5.0的标准库. 里面有072的例程. cube_fw_1.2.0库里面也有nucleo 072的例程.哈哈
霹雳之火 回答时间:2015-1-24 20:34:42
写得好详细
harvardx 回答时间:2015-1-24 20:36:19
哈哈 谢谢 .菜鸟实践帖子. 有点水, 但是希望大家能够直接拿来编译入门.
harvardx 回答时间:2015-1-24 21:59:34
数码小叶 发表于 2015-1-24 16:43
072的标准库历程我都没找到

帖子的地址有,下载最新的1.5.0的标准外设库.里面就有
damiaa 回答时间:2015-1-24 22:27:38
ST目前推广力度和新品发布速度都比较快。大家有福了。哈哈。
harvardx 回答时间:2015-1-24 22:45:55
以上 版权归mbed中国所有.
wwff2007wwff 回答时间:2015-1-24 23:29:30
不错,学习啦,mbed的在线开发网址是 mbed.org吗?
wwff2007wwff 回答时间:2015-1-24 23:35:44
怎么知道mbed支持哪些具体的芯片呢?
1234下一页

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版