1-汇编编写的启动文件
startup_stm32f10x_hd.s:设置堆栈指针、设置PC指针、初始化中断向量表、配置系统时钟、对用C库函数_main最终去到C的世界
2-时钟配置文件
system_stm32f10x.c:把外部时钟HSE=8M,经过PLL倍频为72M。
3-外设相关的
stm32f10x.h:实现了内核之外的外设的寄存器映射
xxx:GPIO、USRAT、I2C、SPI、FSMC
stm32f10x_xx.c:外设的驱动函数库文件
stm32f10x_xx.h:存放外设的初始化结构体,外设初始化结构体成员的参数列表,外设固件库函数的声明
4-内核相关的
CMSIS - Cortex 微控制器软件接口标准
core_cm3.h:实现了内核里面外设的寄存器映射
core_cm3.c:内核外设的驱动固件库
NVIC(嵌套向量中断控制器)、SysTick(系统滴答定时器)
misc.h
misc.c
5-头文件的配置文件
stm32f10x_conf.h:头文件的头文件
//stm32f10x_usart.h
//stm32f10x_i2c.h
//stm32f10x_spi.h
//stm32f10x_adc.h
//stm32f10x_fsmc.h
……
6-专门存放中断服务函数的C文件
stm32f10x_it.c
stm32f10x_it.h
中断服务函数你可以随意放在其他的地方,并不是一定要放在stm32f10x_it.c
include "stm32f10x.h" // 相当于51单片机中的 #include
int main(void)
{
// 来到这里的时候,系统的时钟已经被配置成72M。
}
关键字:STM32 固件库 文件分析
引用地址:
STM32固件库文件分析
推荐阅读最新更新时间:2024-11-17 14:59
关于STM32与SD卡通信的一些思考与总结
SD的驱动和应用困扰了我很久,寒假的时候看到SD简化版物理层协议的时候就傻掉了,看到SD的驱动快3000行的代码也动摇了。这几天几种地看了一下SD卡的相关内容,总结了一些体会,感觉也没有那么恐怖了。我决定从分层上来讨论SD的驱动和应用,因为这样可以构建一个清晰的逻辑,且不知哪位计算机大师曾说过:一切计算机问题都可以用分层的方法来解决。 我自己把SD卡从驱动到应用共分为4层,从下至上依次为:驱动层、物理层、文件系统层、应用层。下面一一来介绍各层的一些重要的操作。 1)驱动层 驱动层,对应到ST的库,就是stm32f10x_sdio.c/.h这个两文件。其实使用任何一个STM32的外设,只要用库函数都离不开这一对互相对应的.c
[单片机]
STM32如何确定执行哪个中断函数
如下面所示: NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; //NRF24L01 中断响应 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级 0 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //子优先级为1 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能 NVIC_Init(&NVIC_InitStructure); 则对应的中断函数就是 STM3210x_
[单片机]
STM32跑马灯实验——库函数版本
1.编写led.h文件 #ifndef __LED_H #define __LED_H //如果标识符__LED_H没有被定义,则定义标识符__LED_H, void LED_Init(void); #endif 3,编写led.c文件 #include led.h #include stm32f4xx.h void LED_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE); GPIO_InitStructure.GP
[单片机]
条件编译的用法
看正点原子的stm32串口初始化程序,usart.h文件里如下: view plain copy #ifndef __USART_H #define __USART_H #include stm32f10x_lib.h #include stdio.h extern u8 USART_RX_BUF ; //接收缓冲,最大63个字节.末字节为换行符 extern u8 USART_RX_STA; //接收状态标记 //如果想串口中断接收,请不要注释以下宏定义 //#define EN_USART1_RX //使能串口1接收 void uar
[单片机]
意法半导体推出STM32扩展软件,简化物联网终端安全功能部署
通过在一个简便的STM32Cube扩展软件包内整合安全启动、安全固件更新和安全引擎服务,意法半导体的X-CUBE-SBSFU v.2.0能帮助产品开发人员充分利用STM32 *微控制器的安全功能保护物联网终端等联网设备的数据安全、管理生命周期。 通过在微控制器上建立可信根,X-CUBE-SBSFU安全启动可使知识产权得到保护,将启动安全检查并激活STM32的内置安全机制,而且每次执行用户应用程序前均会检查代码的真实性和完整性,以防止无效或恶意代码运行。当远程连接网络时,可信设备将按照公认的最佳安全实践参与身份互验。 固件安全更新功能解决了固件的安全加载和编程问题,有助于设备终身管理,并利用修补程序、功能升级和安全更新应
[物联网]
解决低功耗之后无法下载程序
问题背景: 在调试低功耗的时候,错误的将单片机一上电就进入低功耗,通过外部复位引脚让其复位,虽然可以成功,但是立马又进入了低功耗,唤醒的时间太短,毫无卵用。 解决办法: 因为单片机烧写的SWD口一直接的都是 VCC SWCLK SWDIO GND,想起来JLINK上面是有复位引脚的,所以找出来把它接到了单片机的外部复位引脚上即可解决。 结果:
[单片机]
STM32出现HardFault_Handler问题查找方法
STM32出现HardFault_Handler故障的原因主要有两个方面: 1、内存溢出或者访问越界。这个需要自己写程序的时候规范代码,遇到了需要慢慢排查。 2、堆栈溢出。增加堆栈的大小。 出现问题时排查的方法: 发生异常之后可首先查看LR寄存器中的值,确定当前使用堆栈为MSP或PSP,然后找到相应堆栈的指针,并在内存中查看相应堆栈里的内容。由于异常发生时,内核将R0~R3、R12、LR、PC、XPRS 寄存器依次入栈,其中LR即为发生异常前PC将要执行的下一条指令地址。 注意:寄存器均是32位,且STM32是小端模式。(参考Cortex-M3权威) 编写问题代码如下: void StackFlow(void) { in
[单片机]
实现STM32的串口数据发送和printf函数重定向
在调试电机驱动程序的时候,是不能随便利用中断来进行一些寄存器或数据的查看的,不然你在运行的时候突然来一下,如果占空比大的话那可能直接就把MOS管给烧了,所以我们很多情况下只能使用USART(串口)来进行程序的调试和数据的监控了。 对于STM32来说,由于很多内容都是有库来实现的,那就省了很多时间,直接看个例子就可以写了,大致有4步步骤: 1 1、RCC始终初始化,对端口和USARTX使能时钟 2 2、初始化端口功能,RX设置为输入悬空,TX设置为复用功能的推挽输出,注意GPIO_SPEED要设置下,我没设置弄了半天都没输出 3 3、设置USARTX寄存器,波特率、数据位、校验位、停止位等 4 4、看需要是否开中断,我这里
[单片机]