找回密码
 立即注册
查看: 121|回复: 7

32的IO口作为PWM输出时,能够读该IO口的当前电平吗

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-06-06 16:02:56

3

主题

4

回帖

125

积分

注册会员

积分
125
发表于 2025-6-6 16:02:56 | 显示全部楼层 |阅读模式
32的IO口作为PWM输出时,能够读该IO口的当前电平吗?我写了个简单的程序测试,在PWM占空比输出为50%,示波器测量端口波形正常,但程序中直接读该IO口似乎一直是高电平,是方法不对吗?或者PWM哪个寄存器可以查询相应PWM输出端口的当前电平状态?
1.png
2.png
回复

使用道具 举报 送花

3

主题

717

回帖

145

积分

等待验证会员

积分
145
发表于 2025-6-6 16:28:00 | 显示全部楼层
在STM32的L2L协议中,SCL(数据端口)和SCRA(控制端口)是不同的端口,分别用于发送和接收数据。读取SCL和SCRA的电平时,需要分别使用对应的寄存器。以下是具体的步骤和注意事项:

1. 正确读取SCL的电平:
首先,SCL的电平通常由LRCR寄存器(32位)来表示。当SCL在低电平(0)时,LRCR的最低位为1;在高电平(1)时,LRCR的最低位为0。
如果SCL在工作状态(如占空比为50%时),其电平应该是低电平(0)。此时,读取LRCR的最低位时,应观察其状态。
如果SCL在低电平时,LRCR的最低位应为1;如果在高电平时,应为0。

2. 正确读取SCRA的电平:
SCRA的电平通常由LRCA寄存器(32位)来表示。当SCRA在低电平时,LRCA的第二低位为1;在高电平时,第二低位为0。
与SCL类似,如果SCRA在工作状态(如占空比为50%时),其电平应为低电平(0)。

3. 读取数据端口(通常由LRCR或LRCC寄存器表示):
如果数据端口在工作状态时,其电平由LRCR或LRCC寄存器表示。
通常,无论SCL还是SCRA处于高或低电平,数据端口的电平应为高电平(1)。

4. 读取错误的可能性:
如果程序中同时读取SCL和SCRA的电平,可能会导致读取错误,因为SCL和SCRA的电平通常在不同的状态下(低或高电平)。
正确的做法是分别读取SCL和SCRA的电平,而不是同时读取它们。

5. 如何确定程序中的读取错误:
用户在程序中直接读取SCL或SCRA的电平时,读取结果始终显示为高电平(1)。
通常,数据端口在工作状态时应为高电平。
如果程序中同时读取SCL和SCRA,可能导致读取错误,因为它们的电平状态可能相反。

6. 解决方法:
检查程序中读取的顺序:确保程序中分别读取SCL和SCRA的电平,而不是同时读取它们。
使用正确的寄存器:确保程序中使用正确的寄存器来读取SCL和SCRA的电平。
使用正确的数据端口寄存器:确保程序中使用正确的数据端口寄存器(如LRCR或LRCC)来读取数据端口的电平。

7. 总结:
在读取SCL和SCRA的电平时,需要分别使用LRCR和LRCA寄存器。
如果程序中同时读取SCL和SCRA的电平,可能导致读取错误。
读取数据端口的电平时,通常应使用LRCR或LRCC寄存器,并确保数据端口处于工作状态时电平为高电平。

通过以上步骤,可以正确读取SCL和SCRA的电平,并确保程序运行正常。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:208
  • 最近打卡:2025-06-16 08:41:37
已绑定手机

67

主题

1918

回帖

4307

积分

荣誉版主

无情的代码机器

积分
4307
发表于 2025-6-6 16:34:33 | 显示全部楼层
什么需求呢?
主频和PWM输出频率不在一个级别,没法实时读吧
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:499
  • 最近打卡:2025-06-16 10:06:31
已绑定手机
已实名认证

112

主题

2391

回帖

6016

积分

版主

积分
6016
发表于 2025-6-6 16:49:00 | 显示全部楼层
输出和输入都是末端接在一起到GPIO的,所以输出的时候进行读取是可以的。
但是pwm本身频率比较高,如果想要测试读取,可以将pwm频率放慢,然后加快I/O读取速度,这样就能看到读取的电平变化了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-06-06 16:02:56

3

主题

4

回帖

125

积分

注册会员

积分
125
发表于 2025-6-6 17:01:36 | 显示全部楼层
erci*** 发表于 2025-6-6 16:34
什么需求呢?
主频和PWM输出频率不在一个级别,没法实时读吧

感谢回复!
通过PWM对电机进行调速,想在PWM控制端口输出为高电平的中间位置时,启动ADC检测电流。比如,高电平持续总时长为40us,则在第20us时开启电机电流检测。当前只想先做个简单的测试,能够知道PWM当前是输出高还是低,然后启动ADC采集电流,大概对比一下100%占空比和50%占空比的电流关系。

后期实际做可能会考虑手册上提到的PWM触发ADC+定时器的方案来做。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-06-06 16:02:56

3

主题

4

回帖

125

积分

注册会员

积分
125
发表于 2025-6-6 17:06:55 | 显示全部楼层
王*** 发表于 2025-6-6 16:49
输出和输入都是末端接在一起到GPIO的,所以输出的时候进行读取是可以的。
但是pwm本身频率比较高,如果想要 ...

实际测试,当IO口用作PWM时,直接读IO似乎不对,所以可能单独再拿个IO口作输入口接到PWM输出端上读取。

点评

奥,那可能是因为pwm部分在驱动过程中给IO部分占用掉了 使用PWMx_ENO寄存器关闭PWM输出使能,应该就可以读取到了  详情 回复 发表于 2025-6-6 17:52
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:499
  • 最近打卡:2025-06-16 10:06:31
已绑定手机
已实名认证

112

主题

2391

回帖

6016

积分

版主

积分
6016
发表于 2025-6-6 17:52:50 | 显示全部楼层
xym*** 发表于 2025-6-6 17:06
实际测试,当IO口用作PWM时,直接读IO似乎不对,所以可能单独再拿个IO口作输入口接到PWM输出端上读取。 ...

奥,那可能是因为pwm部分在驱动过程中给IO部分占用掉了
使用PWMx_ENO寄存器关闭PWM输出使能,应该就可以读取到了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:94
  • 最近打卡:2025-06-16 11:51:06

74

主题

6090

回帖

1万

积分

超级版主

积分
12723
发表于 2025-6-6 22:39:30 | 显示全部楼层
任何时候都可以读取IO端口的电平,跟你将IO设置成什么功能没有任何关系,读IO是一个独立的输入电路,永远连接在引脚上,读IO就是读这个引脚的电平。
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-16 18:05 , Processed in 0.219840 second(s), 92 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表