前几天弄了块探索者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帮助你简化了很多拷贝库的操作,库文件可以打开,而且只读,一直人为没必要修改标准库文件,若需要就自己重定义,并且建立在新的文件,并配上注释,否则是很不好的习惯。
---------------------------------
才玩了半月多的stm32开发,以前单片机也就玩过51,还是20年前的事情,做新的产品,刚好公司做这方面开发的辞职了,好的程序员也不好找,没办法,骑驴找马,只能自己动手了,第一次发帖子,而且是后学,不好不对的,请指点。
---------------------------------
谢谢支持
---------------------------------
原子光碟里面的是: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很丰富,例子也很详细,就是文档资料太少了些,而且很多函数名称,包括宏定义都和以前的不同了。
一周热门 更多>