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

STM32F769I-DISCO评测之(七)实时操作系统FreeRTOS体验

[复制链接]
Stm32McuLover 提问时间:2016-11-20 18:54 /




开发环境的搭建和STM32CubeMX(STM32官网)的安装配置见前文,本文使用强大的STM32CubeMX配置STM32外设,快速生成工程模板,演示了LED闪烁和串口例程,和前期的区别就是添加了FreeRTOS嵌入式实时操作系统。
一、资源分配
STM32F769I-DISCO板载2颗用户LED,LD1位红色,LD2为绿色,如下:

全网首发,STM32F769I-DISCO评测&机智云物联网智能硬件云服务体验系列之(七)使用STM32CubeMX快速配置LED ...

全网首发,STM32F769I-DISCO评测&机智云物联网智能硬件云服务体验系列之(七)使用STM32CubeMX快速配置LED  ...

全网首发,STM32F769I-DISCO评测&机智云物联网智能硬件云服务体验系列之(七)使用STM32CubeMX快速配置LED ...

全网首发,STM32F769I-DISCO评测&机智云物联网智能硬件云服务体验系列之(七)使用STM32CubeMX快速配置LED  ...

根据原理图,LD1连接到STM32F769NIH6的PJ13,LD2连接到了PJ5,GPIO输出高电平即可点亮对应的LED。

全网首发,STM32F769I-DISCO评测&机智云物联网智能硬件云服务体验系列之(七)使用STM32CubeMX快速配置LED ...

全网首发,STM32F769I-DISCO评测&机智云物联网智能硬件云服务体验系列之(七)使用STM32CubeMX快速配置LED  ...

全网首发,STM32F769I-DISCO评测&机智云物联网智能硬件云服务体验系列之(七)使用STM32CubeMX快速配置LED ...

全网首发,STM32F769I-DISCO评测&机智云物联网智能硬件云服务体验系列之(七)使用STM32CubeMX快速配置LED  ...

板载STLINK具有虚拟串口功能,连接到了STM32F769NIH6的PA9和PA10,查阅数据手册,该GPIO可复用为UART1。


一、STM32CubeMX配置步骤


Step1:打开STM32CubeMX,新建工程,选择MCU型号为STM32F769NIH6;

全网首发,STM32F769I-DISCO评测&机智云物联网智能硬件云服务体验系列之(七)使用STM32CubeMX快速配置LED ...

全网首发,STM32F769I-DISCO评测&机智云物联网智能硬件云服务体验系列之(七)使用STM32CubeMX快速配置LED  ...

Step2:选择时钟源,根据原理图,STM32F769I-DISCO有外部有源晶振25MHz,因此时钟源需要选择BYPASS Clock Source,并开启SW仿真调试;

全网首发,STM32F769I-DISCO评测&机智云物联网智能硬件云服务体验系列之(七)使用STM32CubeMX快速配置LED ...

全网首发,STM32F769I-DISCO评测&机智云物联网智能硬件云服务体验系列之(七)使用STM32CubeMX快速配置LED  ...

全网首发,STM32F769I-DISCO评测&机智云物联网智能硬件云服务体验系列之(七)使用STM32CubeMX快速配置LED ...

全网首发,STM32F769I-DISCO评测&机智云物联网智能硬件云服务体验系列之(七)使用STM32CubeMX快速配置LED  ...

Step3:使能FreeRTOS;

全网首发,STM32F769I-DISCO评测&机智云物联网智能硬件云服务体验系列之(七)使用STM32CubeMX快速配置LED ...

全网首发,STM32F769I-DISCO评测&机智云物联网智能硬件云服务体验系列之(七)使用STM32CubeMX快速配置LED  ...

由于使用了FreeRTOS,Systick定时器用于实时操作系统心跳,因此HAL_Delay() API的时基使用了一个普通定时器TIM7;

全网首发,STM32F769I-DISCO评测&机智云物联网智能硬件云服务体验系列之(七)使用STM32CubeMX快速配置LED ...

全网首发,STM32F769I-DISCO评测&机智云物联网智能硬件云服务体验系列之(七)使用STM32CubeMX快速配置LED  ...

Step4:这里串口一定要是PA9和PA10,UART1,直接使能USART1会发现引脚不是PA9和PA10,需要先在引脚PA9、PA10上选择串口功能,然后在左边外设栏使串口1为异步模式;

全网首发,STM32F769I-DISCO评测&机智云物联网智能硬件云服务体验系列之(七)使用STM32CubeMX快速配置LED ...

全网首发,STM32F769I-DISCO评测&机智云物联网智能硬件云服务体验系列之(七)使用STM32CubeMX快速配置LED  ...

Step5:配置LED引脚为输出模式,可在搜索框输入引脚名以便快速定位,我们需要配置PJ5和PJ13;

全网首发,STM32F769I-DISCO评测&机智云物联网智能硬件云服务体验系列之(七)使用STM32CubeMX快速配置LED ...

全网首发,STM32F769I-DISCO评测&机智云物联网智能硬件云服务体验系列之(七)使用STM32CubeMX快速配置LED  ...

Step6:把系统时钟配置为最大216MHz;

全网首发,STM32F769I-DISCO评测&机智云物联网智能硬件云服务体验系列之(七)使用STM32CubeMX快速配置LED ...

全网首发,STM32F769I-DISCO评测&机智云物联网智能硬件云服务体验系列之(七)使用STM32CubeMX快速配置LED  ...

Step7:配置串口参数为115200 b/s, 8 bits data, no parity, 1 stopbit, no flow control

全网首发,STM32F769I-DISCO评测&机智云物联网智能硬件云服务体验系列之(七)使用STM32CubeMX快速配置LED ...

全网首发,STM32F769I-DISCO评测&机智云物联网智能硬件云服务体验系列之(七)使用STM32CubeMX快速配置LED  ...

Step8:给LED引脚添加用户标签;

全网首发,STM32F769I-DISCO评测&机智云物联网智能硬件云服务体验系列之(七)使用STM32CubeMX快速配置LED ...

全网首发,STM32F769I-DISCO评测&机智云物联网智能硬件云服务体验系列之(七)使用STM32CubeMX快速配置LED  ...

Step9: STM32F7 集成了 Cortex®-M7,其特点是具有 1 级缓存 ( L1- 缓存),该缓存分为两个缓存:数据缓存 ( D- 缓存)和指令缓存( I- 缓存),这样可以实现具有最佳性能的哈佛架构。这些缓存使得即使在高频率下也可以达到零等待状态。默认情况下,指令和数据缓存是禁用的,我们这里把它开启(本例程不开启它也可以)。

全网首发,STM32F769I-DISCO评测&机智云物联网智能硬件云服务体验系列之(七)使用STM32CubeMX快速配置LED ...

全网首发,STM32F769I-DISCO评测&机智云物联网智能硬件云服务体验系列之(七)使用STM32CubeMX快速配置LED  ...

Step10:添加3个任务;

全网首发,STM32F769I-DISCO评测&机智云物联网智能硬件云服务体验系列之(七)使用STM32CubeMX快速配置LED ...

全网首发,STM32F769I-DISCO评测&机智云物联网智能硬件云服务体验系列之(七)使用STM32CubeMX快速配置LED  ...

Step11:最后点击菜单栏的齿轮图标即可生成工程,旁边的按钮用于生成PDF配置报告;

全网首发,STM32F769I-DISCO评测&机智云物联网智能硬件云服务体验系列之(七)使用STM32CubeMX快速配置LED ...

全网首发,STM32F769I-DISCO评测&机智云物联网智能硬件云服务体验系列之(七)使用STM32CubeMX快速配置LED  ...

填写工程名字、保存路径、IDE(这里选Keil),注意堆栈大小;

全网首发,STM32F769I-DISCO评测&机智云物联网智能硬件云服务体验系列之(七)使用STM32CubeMX快速配置LED ...

全网首发,STM32F769I-DISCO评测&机智云物联网智能硬件云服务体验系列之(七)使用STM32CubeMX快速配置LED  ...

在Code Generator选项卡勾选下“为每个外设生成单个的.c和.h文件”以方便工程文件管理;

全网首发,STM32F769I-DISCO评测&机智云物联网智能硬件云服务体验系列之(七)使用STM32CubeMX快速配置LED ...

全网首发,STM32F769I-DISCO评测&机智云物联网智能硬件云服务体验系列之(七)使用STM32CubeMX快速配置LED  ...

一、用户软件
生成工程后,使用Keil打开。
要想使用C标准输出函数printf需要把它重映射到串口1,在uart.c文件添加如下代码即可,另外需要注意下Keil选项卡需勾选微库(默认是勾选了的);
#ifdef__GNUC__
/* WithGCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
set to'Yes') calls __io_putchar() */
#definePUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#definePUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /*__GNUC__ */
/**
* @briefRetargets the C library printf function to the USART.
* @paramNone
* @retvalNone
*/
PUTCHAR_PROTOTYPE
{
/* Placeyour implementation of fputc here */
/* e.g.write a character to the EVAL_COM1 and Loop until the end of transmission */
HAL_UART_Transmit(&huart1,(uint8_t *)&ch, 1, 0xFFFF);
returnch;

}

全网首发,STM32F769I-DISCO评测&机智云物联网智能硬件云服务体验系列之(七)使用STM32CubeMX快速配置LED ...

全网首发,STM32F769I-DISCO评测&机智云物联网智能硬件云服务体验系列之(七)使用STM32CubeMX快速配置LED  ...

全网首发,STM32F769I-DISCO评测&机智云物联网智能硬件云服务体验系列之(七)使用STM32CubeMX快速配置LED ...

全网首发,STM32F769I-DISCO评测&机智云物联网智能硬件云服务体验系列之(七)使用STM32CubeMX快速配置LED  ...

在mxconstants.h文件添加LED控制宏定义;

全网首发,STM32F769I-DISCO评测&机智云物联网智能硬件云服务体验系列之(七)使用STM32CubeMX快速配置LED ...

全网首发,STM32F769I-DISCO评测&机智云物联网智能硬件云服务体验系列之(七)使用STM32CubeMX快速配置LED  ...

最后在freertos.c文件添加用户代码,一共3个任务,LED1(红色)每隔200ms翻转,LED2(绿色)每隔1000ms翻转,串口每隔500ms打印字符串;

全网首发,STM32F769I-DISCO评测&机智云物联网智能硬件云服务体验系列之(七)使用STM32CubeMX快速配置LED ...

全网首发,STM32F769I-DISCO评测&机智云物联网智能硬件云服务体验系列之(七)使用STM32CubeMX快速配置LED  ...

还需在freertos.c开头添加3个头文件,否则编译报错;

全网首发,STM32F769I-DISCO评测&机智云物联网智能硬件云服务体验系列之(七)使用STM32CubeMX快速配置LED ...

全网首发,STM32F769I-DISCO评测&机智云物联网智能硬件云服务体验系列之(七)使用STM32CubeMX快速配置LED  ...

编译,烧录好后,打开串口调试助手,设置对应参数,按一下板卡上的黑色复位键,程序开始运行,可看到三个任务“同时并行”运行;

全网首发,STM32F769I-DISCO评测&机智云物联网智能硬件云服务体验系列之(七)使用STM32CubeMX快速配置LED ...

全网首发,STM32F769I-DISCO评测&机智云物联网智能硬件云服务体验系列之(七)使用STM32CubeMX快速配置LED  ...


总结:使用STM32CubeMX的确方便

附件:

1.工程源码:
STM32F769I-DISCO-Demo-FreeRTOS-LED&UART.part01.rar (2 MB, 下载次数: 29)

评分

参与人数 1 ST金币 +30 收起 理由
zero99 + 30

查看全部评分

收藏 4 评论22 发布时间:2016-11-20 18:54

举报

22个回答
any012 回答时间:2016-12-29 10:17:09
本帖最后由 any012 于 2016-12-29 10:33 编辑

讲的很详细。

重定义printf语句那里不太明白。

#ifdef__GNUC__
/* WithGCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
set to'Yes') calls __io_putchar() */
#definePUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#definePUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /*__GNUC__ */

这里的条件编译,第一个条件是在什么情况下用到?
之前无论看原子还是野火的教程,都是直接第二部分。

抱怨一下,压缩文件太多,下载太麻烦了,解压后看到是50M左右的工程,编译产生的文件占了30M左右,建议把这些删掉后再压缩。
Stm32McuLover 回答时间:2016-11-20 23:45:44
at89 发表于 2016-11-20 21:56
666,评测都开始发出来了,板子哪里搞的?我也想搞一块

社区活动
Stm32McuLover 回答时间:2016-12-29 12:10:37
any012 发表于 2016-12-29 10:17
讲的很详细。

重定义printf语句那里不太明白。

谢谢支持
at89 回答时间:2016-11-20 21:56:36
666,评测都开始发出来了,板子哪里搞的?我也想搞一块
zero99 回答时间:2016-11-21 13:18:22
谢谢分享
zengyi703-16313 回答时间:2016-11-22 07:16:45
谢楼主分享
jinglixixi 回答时间:2016-11-22 08:07:35
什么时间发的板子?太快了!
Stm32McuLover 回答时间:2016-11-22 12:18:35
jinglixixi 发表于 2016-11-22 08:07
什么时间发的板子?太快了!

wolfgang 回答时间:2016-11-25 13:21:54
谢谢分项,有机会一定亲自尝试!!!
zhangdaijin 回答时间:2016-11-25 13:40:46
谢谢分享
钊钊 回答时间:2016-11-25 17:31:11
非常厉害
wdshuang09 回答时间:2016-11-27 09:54:29
F7都开始玩了,我的F1都没有学完,哎         
Stm32McuLover 回答时间:2016-11-27 12:03:57
wdshuang09 发表于 2016-11-27 09:54
F7都开始玩了,我的F1都没有学完,哎

明年就是H7了
wdshuang09 回答时间:2016-11-27 12:26:38

求大神带领学习,
zbber 回答时间:2016-11-27 13:16:53
谢谢分项,有机会一定亲自尝试
andypanfan 回答时间:2016-11-27 20:08:13
谢谢分享  很厉害
12下一页
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版