stm32学习-创建工程项目

Posted 殇堼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了stm32学习-创建工程项目相关的知识,希望对你有一定的参考价值。

startup_stm32f10x_hd.s的作用:将汇编语言转化到C语言编程
复位程序中调用函数SystemInit和main
SystemInit用于初始化系统的时,来自于外部的固件库。
main函数是一个C库函数
添加三个文件
startup_stm32f10x_hd.s
main.c
stm32f10x.h

main.c文件

#include "stm32f10x.h"

int main(void)
	{
	//使用绝对地址的方法
	//打开GPIO端口时钟,置1操作,((1)<<3)第三位置1
	*(unsigned int *)0x40021018 |=((1)<<3);
		
	//控制CRL寄存器,置1操作
	*(unsigned int *)0x40010C00 |=((1)<<(4*5));
		
	//ODR寄存器中的1左移0位(清零操作);强制数据类型转换
	*(unsigned int *)0x40021C0C &=~(1<<0);
		
 
}
	
	void SystemInit(void)
	{
		//函数体为空,骗过编译器不报错
	}


原因:未定义函数SystemInit和main

stm32f10x.h文件

//用于存放寄存器映射的代码
//外设
#define PERIPH_BASE      ((unsigned int)0x40000000) //外设基地址
#define APB1PERIPH_BASE   PERIPH_BASE                      //APB1基地址
#define APB2PERIPH_BASE   (PERIPH_BASE + 0x10000)            //APB2基地址
#define AHBPERIPH_BASE    (PERIPH_BASE + 0x20000)//将DMA1当做AHB基地址

#define 	RCC_BASE     (AHBPERIPH_BASE+0x20000)                //RCC的基地址
#define 	GPIOB_BASE   (APB2PERIPH_BASE+0x0C00)              //GPIOB的基地址

//立即数强制转化为32位的指针进行操作  
#define 	RCC_APB2ENR   *(unsigned int*)(RCC_BASE+0x18)
	
//定义寄存器
#define 	GPIOB_CRL     *(unsigned int*)(GPIOB_BASE+0x00)
#define 	GPIOB_CRH     *(unsigned int*)(GPIOB_BASE+0x04)
#define 	GPIOB_IDR     *(unsigned int*)(GPIOB_BASE+0x08)
#define 	GPIOB_ODR     *(unsigned int*)(GPIOB_BASE+0x0CH)
#define 	GPIOB_BSRR    *(unsigned int*)(GPIOB_BASE+0x10)
#define 	GPIOB_BRR     *(unsigned int*)(GPIOB_BASE+0x14)
#define 	GPIOB_LCKR    *(unsigned int*)(GPIOB_BASE+0x18)

以上是关于stm32学习-创建工程项目的主要内容,如果未能解决你的问题,请参考以下文章

正在学习stm32,谁可以告诉我怎么可以用函数库创建一个工程啊,详细点!谢谢了。。。

STM32学习心得——MDK开发模板的创建

STM32学习之大纲

如何用keil5创建stm32的工程

STM32 学习6 CMSIS库函数标准及库函数工程模板

STM32 学习6 CMSIS库函数标准及库函数工程模板