MDK5 Manage Run-time Enviroment 使用

2019-07-20 10:37发布

前几天弄了块探索者STM32F4的板子,新板子马上就运行MDK5弄个工程下载一下咯,先弄个简单的,就拿原子光碟的LED跑马灯的例子,加载工程,编译,报错,少了core_cm_Instr.h,直接从光碟的stm32 lib4.0找到并拷贝到Core目录即可。运行成功,但是发现只有LED1闪,后来发现LED2坏的,自己DIY了个绿 {MOD}的LED。然后看了下原子的STM32F4开发指南-库函数版本,然后按照步骤操作了一遍建立工程,当然最快的方法就是用原子的模板了。

MDK5 装了很久,之前只是研究了下例子,发现MDK5和以前版本使用和以前的版本有点区别,以前建工程,需要拷贝各种库。MDK5简单多了,以原子的跑马灯为例子:
1.建立一个新的工程,选择Device是stm32F407ZGTx确定即可。
2.建立App组,加入刚才原子刚才跑马灯工程的led.c,led.h,delay.c,delay.h,main.c。
3.先别忙着编译,点击Manage Run-time Enviroment 按钮,  ,选择需要的运行环境,注意:绿 {MOD}才是有效的。我的电脑上的software packages 都是最新的了,版本上图有对应的版本号,大家参考。
4.改delay.c文件,原本件都是原子的stm32F4光碟中的库函数例程,加上#include "stm32f4xx_hal_conf.h", 注意,就是要把LED_Init()函数中的
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); 注释掉,添加HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
5.改led.c文件,源文件如下
void LED_Init(void)
{      
  GPIO_InitTypeDef  GPIO_InitStructure;
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  GPIO_Init(GPIOF, &GPIO_InitStructure)
  GPIO_SetBits(GPIOF,GPIO_Pin_9 | GPIO_Pin_10);
}
修改为:
void LED_Init(void)
{      
  GPIO_InitTypeDef  GPIO_InitStructure;
__GPIOF_CLK_ENABLE() ;
  GPIO_InitStructure.Pin = GPIO_PIN_9 | GPIO_PIN_10;
  GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStructure.Pull = GPIO_PULLUP;
  GPIO_InitStructure.Speed = GPIO_SPEED_HIGH;
  HAL_GPIO_Init(GPIOF, &GPIO_InitStructure);
  HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9 | GPIO_PIN_10,GPIO_PIN_RESET);
}
6.修改main.c,源文件如下:
int main(void)

   delay_init(168);    
   LED_Init();          
  while(1)
  {
    GPIO_ResetBits(GPIOF,GPIO_Pin_9);  
    GPIO_SetBits(GPIOF,GPIO_Pin_10);   
    delay_ms(500);       
    GPIO_SetBits(GPIOF,GPIO_Pin_9);    
   GPIO_ResetBits(GPIOF,GPIO_Pin_10);
   delay_ms(500);                     
  }
}
修改为:
int main(void)
{
delay_init(168); 
LED_Init();
  while(1)
  {
    HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9,GPIO_PIN_RESET);  
    HAL_GPIO_WritePin(GPIOF,GPIO_PIN_10,GPIO_PIN_SET);  
    delay_ms(500);      
     HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9,GPIO_PIN_SET);    
     HAL_GPIO_WritePin(GPIOF,GPIO_PIN_10,GPIO_PIN_RESET); 
     delay_ms(500);                    
  }
}
6.编译,下载,效果和原子的例程效果一样。
7.最终个工程树如图   ,修改的地方是因为库的版本不同(这个不太清楚,但是函数名称,头文件的注释的版本确实和原子例程文件的版本不同,如果相同,估计不需要修改,只需要加上#include "stm32f4xx_hal_conf.h"即可,整个工程文件少了很多,干净了很多,以前刚学习的时候,网上下的例子,里面一大堆文件,也不知道哪些有用,哪些没有用,有些人还直接修改了标准库,让你查半天莫名其妙,MDK5帮助你简化了很多拷贝库的操作,库文件可以打开,而且只读,一直人为没必要修改标准库文件,若需要就自己重定义,并且建立在新的文件,并配上注释,否则是很不好的习惯。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
正点原子
1楼-- · 2019-07-20 15:30
 精彩回答 2  元偷偷看……
破坏王
2楼-- · 2019-07-20 17:52
回复【2楼】正点原子:
---------------------------------
才玩了半月多的stm32开发,以前单片机也就玩过51,还是20年前的事情,做新的产品,刚好公司做这方面开发的辞职了,好的程序员也不好找,没办法,骑驴找马,只能自己动手了,第一次发帖子,而且是后学,不好不对的,请指点。
正点原子
3楼-- · 2019-07-20 23:39
回复【3楼】破坏王:
---------------------------------
谢谢支持
styleno1
4楼-- · 2019-07-21 01:50
 精彩回答 2  元偷偷看……
破坏王
5楼-- · 2019-07-21 02:29
回复【5楼】styleno1:
---------------------------------
原子光碟里面的是:STM32F4xx DSP and Standard eripherals Library  
我现在MDK5里面的是:STM32CubeF4 Firmware ackage 1.3.0
STM32Cube Version 1.3 includes:
The STM32CubeMX, a graphical software configuration tool that allows to generate C initialization code using graphical wizards.
A comprehensive embedded software platform, delivered per series (such as STM32CubeF4 for STM32F4 series)
The STM32Cube HAL, an STM32 abstraction layer embedded software, ensuring maximized portability across STM32 portfolio
A consistent set of middleware components such as RTOS, USB, TCP/IP, Graphics
All embedded software utilities coming with a full set of examples

A graphical software configuration tool 是 STM32CubeF4的优势,而且middleware components很丰富,例子也很详细,就是文档资料太少了些,而且很多函数名称,包括宏定义都和以前的不同了。
ninicaoyuan
6楼-- · 2019-07-21 04:19
刚好using MDK5 ,

一周热门 更多>