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口,让灯亮起就 ...
随机推荐
- C#解析匿名JSON数据
C#解析匿名JSON数据 使用工具:Newtonsoft.Json 使用方式: //模拟数据 var jsonData = JsonConvert.SerializeObject(new { Name ...
- ABP 的ajax请求错误:400 Empty or invalid anti forgery header token.
ABP 的ajax请求错误 记录于2018-03-22 13:31:16 星期四 错误信息:400 Empty or invalid anti forgery header token. 我从网上找到 ...
- [jmeter]快速入门
前言 以压测一个api为例.假设有一个非常简单的api http://192.168.1.111:8080/,只是返回 helloworld 字符串. 准备 打开 jmeter,新建测试计划 在测试计 ...
- 概率dp_C++详解
引入 概率 DP 用于解决概率问题与期望问题,建议先对概率和期望的内容有一定了解.一般情况下,解决概率问题需要顺序循环,而解决期望问题使用逆序循环,如果定义的状态转移方程存在后效性问题,还需要用到 高 ...
- 基于Supabase开发公众号接口
在<开源BaaS平台Supabase介绍>一文中我们对什么是BaaS以及一个优秀的BaaS平台--Supabase做了一些介绍.在这之后,出于探究的目的,我利用一些空闲时间基于Micros ...
- 行行AI人才直播第17期:无界AI联合创始人马千里《AIGC,比生产力还多》
谁也没有想到,短短几个月内,AI就在各行各业掀起了一阵狂风暴雨.ChatGPT.Stable Diffusion.Midjourney--AI已经变得十八般武艺样样精通,不仅能够高效率完成很多日常工作 ...
- 快速了解C#接口(Interface)
Runoob 接口定义了所有类继承接口时应遵循的语法合同.接口定义了语法合同 "是什么" 部分,派生类定义了语法合同 "怎么做" 部分. 接口定义了属性.方法和 ...
- Salesforce LWC学习(四十五) lwc支持Console App控制Tab了
本篇参考:https://help.salesforce.com/s/articleView?id=release-notes.rn_lwc_workspaceAPI.htm&release= ...
- Go之流程控制大全: 细节、示例与最佳实践
本文深入探讨Go语言中的流程控制语法,包括基本的if-else条件分支.for循环.switch-case多条件分支,以及与特定数据类型相关的流程控制,如for-range循环和type-switch ...
- 探析ElasticSearch Kibana在测试工作中的实践应用
一. 为什么使用ES Kibana 离线数据测试中最重要的就是数据验证,一部分需要测试es存储数据的正确性,另一部分就需要验证接口从es取值逻辑的正确性.而为了验证es取值逻辑的正确性,就需要用到Ki ...