STM32F103学习笔记:从入门到精通
需积分: 50 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的开发工作。对于初学者来说,不断实践和理解底层原理是提升技能的关键。
711 浏览量
118 浏览量
432 浏览量
291 浏览量
162 浏览量
2024-05-15 上传
291 浏览量
210 浏览量
科技流氓兔
- 粉丝: 2
- 资源: 5
最新资源
- waterGame
- angular-trianglify-animate:Angular Trianglify Animate 是一个很小的 (2kb) 插件,用于为您的页面添加对图像 SVG 动画的支持
- malg-cheong:부산대
- CSE316
- 2ALIENTEK 产品资料.rar
- 艾蒙坎
- 2020policebrutality:2020年警察暴行数据的Web界面
- 高端的婚纱摄影前端网页模板.zip
- idea-prado-plugin:PRADO框架对IntelliJ IDEAPHPStorm的支持
- RF++-开源
- show-action-sheet.zip
- 词法分析 编译原理实验/课程设计(C++实现)
- 影刀RPA系列公开课6:内容简介.rar
- 零基础入门CV数据集-数据集
- elec-market:电力批发市场的典范
- demo_spring_security.zip