1.STM32F4工程新建学习

目录

寄存器版本新建工程

1.新建工程目录,复制需要的文件到工程目录下

2.把工程需要的文件添加到工程

3.在MDK中设置头文件存放路径,以便工程能引用这些文件 

4.配置MDK:全局宏定义

5.编写用户函数

6.编译工程,排错

7.复制正点原子的SYSTEM文件夹到工程,替换启动文件,然后编写代码

新建基于 HAL 库工程模板

1. 复制所需要文件到工程包中。

2.把工程文件引入到工程

3.设置头文件的包含路径

 4.MDK设置(全局宏定义标识符)

5.编写用户程序

6.添加正点原子的SYSTEM文件夹

7.编写函数

8.其他配置


 

学习目的:属性STM32的工程结构及其各目录的意义。


 

  • 寄存器版本新建工程

1.新建工程目录,复制需要的文件到工程目录下

1.1打开mdk软件,然后Project ->New uVision Project

1.2.在本地新建一个目录,作为工程目录,接着再目录中新建一个子文件夹USER

1.3.新建工程保存到USER目录下:

1.4.选择芯片类型,这里以STM32F429IGTx为例:

下一步点击取消:

这样一个简单的工程就新建完成,可以在本地看到USER目录下面多了一些文件:

OK,现在这个工程是一个空的,如果需要开发stm32f429必须添加一些必要的文件。

1.5.添加工程所需的文件,如下所示

文件/文件夹名称文件描述在stm32CubeF4包中路径
startup_stm32f429xx.s启动文件\Drivers\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm
cmsis_armcc.h内核头文件\Drivers\CMSIS\Include
core_cm4.h
core_cmFunc.h
core_cmInstr.h
core_cmSimd.h
stm32f4xx.h顶层头文件\Drivers\CMSIS\Device\ST\STM32F4xx\Include
stm32f429xx.h
system_stm32f4xx.h

1.6.把启动文件放置于USER目录下

新建一个CORE(内核含义)文件夹,然后把\Drivers\CMSIS\Include的五个有关于内核头文件和顶层头文件放置于USER下:

复制\Drivers\CMSIS\Device\ST\STM32F4xx\Include的三个顶层头文件,到test/CORE工程目录下:

 

复制完,工程目录下的CORE就有了8个头文件了,如下:

 


2.把工程需要的文件添加到工程

2.1.管理工程

2.2.新建三个组,用于引入我们在第一步添加的一些头文件和启动文件:

把启动文件添加到USER下:

3.在MDK中设置头文件存放路径,以便工程能引用这些文件 

添加头文件路径:

注意:MKD查找头文件的规则,如果我们选择是CORE,那么MDK只会在CORE目录下查找头文件,不会到下以及目录下查找,如果在CORE的子目录还有文件的话,同样需要把子目录的路径也添加进去。


4.配置MDK:全局宏定义

重要的预编译全局宏定义标识符:   STM32F429xx,入戏所示

5.编写用户函数

5.1.新建一个.c文件,然后编辑一个main入口函数,保存:

5.2.添加这个.c文件添加到分组USER中:


6.编译工程,排错

6.1.编译

报错:.\Objects\test.axf: Error: L6218E: Undefined symbol SystemInit (referred from startup_stm32f429xx.o).

到startup_stm32f429xx.o这个档案去看一看:

报错的原因是因为我们没有SystemInit这个函数可以调用,如果是使用HAL库的话,直接可以调用一个系统的初始化函数,寄存器只能自己搞了。那我们先把系统初始化的代码先注释掉,不让它报错先:

6.2.再次编译,程序直接从mian函数开始执行,这时编译就没有错误了

6.3.此时一个模板就完成了,如果使用STM32F4的寄存器进行代码的编辑的话,必须引入的就是我们刚刚添加的头文件啦。

如下图:

注意:虽然此时工程编译时没有任何问题的,但是我们没有任何系统的一些初始化的文件,比如系统时钟配置等,所以还是暂时不能使用该工程模板编写程序的。


7.复制正点原子的SYSTEM文件夹到工程,替换启动文件,然后编写代码:

7.1.复制寄存器版本的SYSTEM文件夹到工程目录下,如下所示

7.2.在工程中新建一个组,添加.c文件和.h文件:

添加头文件:

编译,通过:

替换启动文件:复制正点原子模板的文件

修改完,编译通过。


7.3.在mian入口函数编写代码:

代码如下:

#include "sys.h" 
#include "usart.h" 
#include "delay.h" 


int main(void)
{ 
	u8 t=0;
	Stm32_Clock_Init(360,25,2,8);	//设置时钟,180Mhz
	delay_init(180);				//初始化延时函数
	uart_init(90,115200);			//串口初始化为115200
	while(1)
	{
		printf("t:%d\r\n",t);
		delay_ms(500);
		t++;
	}
}

系统时钟初始化函数:

编译代码,下载到开发板,串口500ms的周期增加t的值。

 


  • 新建基于 HAL 库工程模板

1. 复制所需要文件到工程包中。

文件/文件夹名称文件描述在stm32CubeF4包中路径工程模板中的文件夹 
Inc、Src文件夹外设库文件\Drivers\STM32F4xx_HAL_DriverHALLIB 
startup_stm32f429xx.s启动文件\Drivers\CMSIS\Device\ST\STM32F4xx\Source\Templates\armCORE 
cmsis_armcc.h内核头文件\Drivers\CMSIS\IncludeCORE 
core_cm4.h 
core_cmFunc.h 
core_cmInstr.h 
core_cmSimd.h 
stm32f4xx.h顶层头文件\Drivers\CMSIS\Device\ST\STM32F4xx\IncludeUSER 
stm32f429xx.h 
system_stm32f4xx.h 
main.h头文件\Projects\STM32F429I-Discovery\Templates\Inc 
stm32f4xx_hal_conf.h 
stm32f4xx_it.h 
main.c源文件\Projects\STM32F429I-Discovery\Templates\Src 
stm32f4xx_hal_msp.c 
stm32f4xx_it.c 
system_stm32f4xx.c 

在本地新建工程模板的文件夹,并复制到本地工程目录, 如下图所示:

复制上面所示的所有文件到指定的文件夹下:包括16个文件和2个文件夹


2.把工程文件引入到工程:

1.1打开mdk软件,然后Project ->New uVision Project

保存,选择芯片类型:

把我们在本地工程文件引入到工程,和上面一样:

删除在HALLIB下的三个.c文件

同时在工程中要删掉下面三个文件 
  
stm32f4xx_hal_dsi.cmipi接口相关函数
stm32f4xx_hal_iptim.c低功耗定时器相关函数
stm32f4xx_hal_msp_template.c空函数

3.设置头文件的包含路径

设置一些工程的晶振和输入路径以及输入中间文件保存路径和生成hex文件等

在本地test目录下新建一个obj文件夹,然后产生的中间文件都输出到这个文件夹,以便后期工程管理:


 4.MDK设置(全局宏定义标识符)

重要的预编译全局宏定义标识符:    USE_HAL_DRIVER,STM32F429xx    中间要用逗号“,”隔开。

意义:这个标识符是可以被整个工程所见的。


5.编写用户程序

5.1.删除main.c文件里面的所有文件,然后写一个main入口函数,编译通过

此时可以在main.c中添加stm32f4xx.h的头文件,就可以调用hal库的代码了。此时还没有系统初始化的一些时钟,所以引入正点原子的system文件夹,去调用系统初始化函数


6.添加正点原子的SYSTEM文件夹

6.1添加这个文件夹,然后在工程新建一个组,添加.c文件,在头文件路径添加.h文件。

添加.c文件:

添加.h文件:

然后编译,通过编译。


7.编写函数

复制下面的代码到mian.函数里面:

#include "sys.h"
#include "delay.h"
#include "usart.h"




void Delay(__IO uint32_t nCount);

void Delay(__IO uint32_t nCount)
{
  while(nCount--){}
}

int main(void)
{

	GPIO_InitTypeDef GPIO_Initure;
     
    HAL_Init();                     //初始化HAL库    
    Stm32_Clock_Init(360,25,2,8);   //设置时钟,180Mhz

    __HAL_RCC_GPIOB_CLK_ENABLE();           //开启GPIOB时钟
	
    GPIO_Initure.Pin=GPIO_PIN_0|GPIO_PIN_1; //PB1,0
    GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;  //推挽输出
    GPIO_Initure.Pull=GPIO_PULLUP;          //上拉
    GPIO_Initure.Speed=GPIO_SPEED_HIGH;     //高速
    HAL_GPIO_Init(GPIOB,&GPIO_Initure);

	while(1)
	{
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);	//PB1置1 
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET);	//PB0置1  			
		Delay(0x7FFFFF);
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET);	//PB1置0
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET);	//PB0置0  
		Delay(0x7FFFFF);
	}
	}

编译通过。


8.其他配置

8.1修改外部晶振为25M

8.2.修改中断优先级分组为2

再次编译后,下载到开发板中。程序运行,PB0和PB1交替输出高低电平!


工程模板下载:

寄存器模板:https://download.csdn.net/download/qq_36243942/10734027

hal库模板:https://download.csdn.net/download/qq_36243942/10734132

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值