STM32F103学习笔记:从入门到精通

需积分: 50 19 下载量 175 浏览量 更新于2024-07-20 1 收藏 101KB DOC 举报
"STM32F103学习笔记与实践心得" STM32F103是意法半导体(STMicroelectronics)生产的一款基于ARM Cortex-M3内核的微控制器,广泛应用于各种嵌入式系统设计。对于初学者来说,理解和掌握STM32F103的操作是至关重要的。以下是对STM32F103学习的一些关键知识点的总结: 1. **标准输入输出(I/O)功能**: 在STM32中,I/O口的设置是通过HAL库或者LL库来实现的。在C语言中, `%` 符号用于格式化输入/输出,如 `%d` 用于读取十进制整数, `%s` 用于读取字符串, `%c` 用于读取字符, `%f` 用于读取浮点数等。这些是C语言的标准IO函数,而在STM32编程中,更多的是直接操作GPIO端口。 2. **GPIO口配置**: - **输出模式**:配置GPIO为输出模式时,通常会使用`GPIO_Mode_Out_PP`(推挽输出),它能直接驱动负载。速度可以设置,如`GPIO_Speed_50MHz`表示高速模式。初始化GPIO结构体后,调用`GPIO_Init()`函数完成配置。例如,将PB5设为推挽输出模式,可使用以下代码: ```c GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); ``` - **输入模式**:对于输入模式,可以设置为上拉或下拉电阻,如`GPIO_Mode_IPU`(上拉输入)。同样,初始化GPIO结构体后,调用`GPIO_Init()`。例如,将PB5设为上拉输入: ```c GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOB, &GPIO_InitStructure); ``` 3. **IO口电平控制**: - `GPIO_ResetBits()` 和 `GPIO_SetBits()` 分别用于清除和设置指定GPIO位的电平,以实现低电平和高电平输出。 - 对于电平翻转,可以直接利用寄存器操作,如 `GPIOB->ODR ^= GPIO_Pin_7;` 实现GPIO7的电平反转。 - 或者使用库函数 `GPIO_WriteBit()` 结合读取和位操作实现电平反转。 4. **中断与NVIC设置**: STM32的中断处理是通过Nested Vector Interrupt Controller (NVIC)来实现的。设置中断首先需要开启相应的外设时钟,然后配置中断源、优先级和抢占优先级。例如,设置外部中断EXTI0触发中断: ```c NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); ``` 接着,还需要配置EXTI线的中断触发条件,如上升沿或下降沿触发,并启用EXTI中断。 5. **中断服务程序(ISR)**: 当满足中断条件时,中断服务程序会被执行。中断服务程序通常包含处理中断事件的代码,例如读取状态、更新数据、执行特定操作等。编写中断服务程序时,需要注意中断处理的快速和简洁,避免长时间阻塞。 6. **调试与开发工具**: 使用STM32CubeMX进行初始化配置,它可以自动生成初始化代码,简化了开发流程。同时,使用像STM32CubeIDE或Keil uVision这样的IDE进行代码编写、编译和调试,它们提供了强大的调试功能,如断点、单步执行、变量观察等。 7. **其他知识点**: - **定时器(TIM)**:用于定时、计数和PWM输出等功能。 - **串口通信(USART/UART)**:实现设备间的通信,如调试信息输出、数据传输等。 - **ADC(模拟数字转换器)**:用于将模拟信号转换为数字信号。 - **DAC(数字模拟转换器)**:用于将数字信号转换为模拟信号。 - **DMA(直接内存访问)**:高效地传输数据,减轻CPU负担。 - **RTOS(实时操作系统)**:如FreeRTOS,用于多任务管理,提高系统的实时性和效率。 以上是对STM32F103自学过程中的主要知识点的概述,通过理解并熟练应用这些概念,可以有效地进行STM32的开发工作。对于初学者来说,不断实践和理解底层原理是提升技能的关键。