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帮助你简化了很多拷贝库的操作,库文件可以打开,而且只读,一直人为没必要修改标准库文件,若需要就自己重定义,并且建立在新的文件,并配上注释,否则是很不好的习惯。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。