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学习-创建工程项目的主要内容,如果未能解决你的问题,请参考以下文章