STM8 STM32 GPIO 细节配置问题
在MCU的GPIO配置中我们经常需要预置某一 IO 上电后为某一固定电平, 如果恰好我们需要上电后的某IO为高电平, 那么在配置GPIO的流程上面需要特别注意。
配置如下: (以下问题仅在STM8 / STM32上测试获得, 其它MCU未知)。
不合理(或者说有bug)的代码初始化流程:
/* GPIO 初始化
---------------------------
* DDR : 0-输入, 1-输出
---------------------------
* DDR CR1 CR2
---------------------------
0 0 0 悬浮输入
0 1 0 上拉输入
0 0 1 中断悬浮输入
0 1 1 中断上拉输入
---------------------------
1 0 0 开漏输出
1 1 0 推挽输出
1 X 1 输出最快10MHZ
*/
void bsp_io_init(void)
{
/* PIN0 PIN1 */
1. PB_DDR = 1 << 0 | 1 << 1 ; //设置方向
2. PB_CR1 = 1 << 0 | 1 << 1 ; //
3. PB_CR2 = 0 << 0 | 0 << 1 ; //设置推挽输出
4.
5. PB_ODR = 1 << 0 | 1 << 1 ; //设置输出电平为 1
}
如上代码的用意是配置PB0 / PB1为推挽输出,并且默认输出为高电平。 但实际的上电效果如下图所示:

MCU 上电瞬间会有一个微小的低脉冲输出, 这是我们不想看到的。 正确的配置应该是先配置 ODR 寄存器, 即输出状态寄存器.然后在配置方向和控制寄存器。
正确的代码初始化流程如下:
void bsp_io_init(void)
{
PB_ODR = 1 << 0 | 1 << 1 ; //设置输出电平为 1
PB_DDR = 1 << 0 | 1 << 1 ; //设置方向
PB_CR1 = 1 << 0 | 1 << 1 ; //
PB_CR2 = 0 << 0 | 0 << 1 ; //设置推挽输出
}
STM8 STM32 GPIO 细节配置问题的更多相关文章
- 基于STM8的GPIO操作---STM8-第一章
1. 综诉 也许单片机在你看来是一件不太容易的事,但据我所知,单片机,无非就是控制它的GPIO口,所以可以看出,学会如何操作控制GPIO口对使用单片机来说是很重要的一件事. 在装载STM8的单片机中, ...
- STM8|STM32 看门狗使用
源:STM8|STM32 看门狗使用 STM8和STM32都配备了独立看门狗,其作用之大不言而喻.以下为STM8及STM32的独立看门狗使用例: 对于STM32单片机: #define SYS_IWD ...
- STM8的GPIO驱动
芯片的外设一般按照这么几个流程来进行,GPIO,外部中断,定时器,串口,ADC,IIC,SPI,下面我就按照各个模式来写 首先是GPIO,STM8的GPIO拥有复用功能,这句话告诉我们必然需要配置IO ...
- STM32 GPIO 配置之ODR, BSRR, BRR 详解
STM32 GPIO 配置之ODR, BSRR, BRR 详解 用stm32 的配置GPIO 来控制LED 显示状态,可用ODR,BSRR,BRR 直接来控制引脚输出状态. ODR寄存器可读可写:既能 ...
- STM32 GPIO外部中断总结
一.STM32中断分组: STM32 的每一个GPIO都能配置成一个外部中断触发源,这点也是 STM32 的强大之处.STM32 通过根据引脚的序号不同将众多中断触发源分成不同的组,比如:PA0,PB ...
- [stm32] GPIO及最小框架
1.GPIO硬件结构图: 2.GPIO程序结构: 3.框架介绍: 这里的ASM是固定启动文件夹,startup_stm32f10x_hd.s表示当前stm32类型为高容量设备,当然还有md.s等. C ...
- 【STM32】STM32 GPIO模式理解
stm32的GPIO的配置模式有好几种,包括: 1. 模拟输入: 2. 浮空输入: 3. 上拉输入: 4. 下拉输入: 5. 开漏输出: 6. 推挽输出: 7. 复用开漏输出: 8. 复用推挽输出 如 ...
- STM32 GPIO相关
1. STM32 的 IO 作为输入的时候,可以程序设置上下拉电阻(可以不用外接上下拉电阻). 2.GPIO有四种输入模式:浮空输入.上拉输入.下拉输入.模拟输入: 3.GPIO有四种输出模式:开漏输 ...
- STM32 GPIO输入输出(基于HAL库)
一.基础认识 GPIO全名为General Purpose Input Output,即通用输入输出.有时候简称为"IO口".通用,说明它是常见的.输入输出,就是说既能当输入口使用 ...
- 明解STM32—GPIO理论基础知识篇之基本结构
一.前言 万物皆有源头,大家学习单片机的源头操作就是通过GPIO口点灯,GPIO作为STM32最基础的外设,也是大家最先接触的外设.当然,看似基础的GPIO,不仅仅是简单的设置好IO口,让灯亮起就 ...
随机推荐
- SQL: Unknown collation: 'utf8mb4_0900_ai_ci'
错误原因 字符集错误,我的版本是5.7,文件中是8.0 解决方案 替换字符集 utf8mb4_0900_ai_ci替换为utf8_general_ci utf8mb4替换为utf8 注意:注释中的部分 ...
- 抽象类 vs 接口【概念解析系列_2】【C# 基础】
〇.前言 抽象类和接口的相似之处还是很多的,但是它们的侧重点不同,本文将简单梳理下. 一.简介与示例 1.1 抽象类 抽象类就是不能使用 new 方法进行实例化的类,即没有具体实例对象的类. 抽象类有 ...
- Cilium系列-10-启用 IPv6 BIG TCP和启用巨帧
系列文章 Cilium 系列文章 前言 将 Kubernetes 的 CNI 从其他组件切换为 Cilium, 已经可以有效地提升网络的性能. 但是通过对 Cilium 不同模式的切换/功能的启用, ...
- 从ABNF读懂HTTP协议格式
定义 HTTP(Hyper Text Transfer Protocol)超文本传输协议 HTML( Hyper Text Markup Language)超文本标记语言 URI(Uniform Re ...
- Android13冻结进程分析:如何提高设备性能和用户体验
Android13冻结进程分析:如何提高设备性能和用户体验 本文介绍了Android13中的冻结进程功能,它是一种重要的资源管理策略,可以提高系统性能和稳定性,同时最大限度地节省设备的资源和电池消耗. ...
- Unity UGUI的Image(图片)组件的介绍及使用
UGUI的Image(图片)组件的介绍及使用 1. 什么是UGUI的Image(图片)组件? UGUI的Image(图片)组件是Unity引擎中的一种UI组件,用于显示2D图像.它提供了一种简单而灵活 ...
- 【pandas小技巧】--DataFrame的显示样式
上一篇介绍了DataFrame的显示参数,主要是对DataFrame中值进行调整. 本篇介绍DataFrame的显示样式的调整,显示样式主要是对表格本身的调整,比如颜色,通过颜色可以突出显示重要的值, ...
- Python操作Redis大全
一.字符串 string Python操作Redis的redis模块对字符串(string)的主要操作函数包括:SET.GET.GETSET.SETEX.SETNX.MSET.MSETNX.INCR( ...
- LeetCode952三部曲之一:解题思路和初级解法(137ms,超39%)
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 题目描述 难度:困难 编程语言:Java 给定一个由不 ...
- git clone时报错:Permission denied
一.问题简述: 执行git clone git@github.com:T-Better/Soft_test.git时报错:\302\226git@github.com: Permission deni ...