你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

st-img
chrome
st-img
firefox
st-img
safari
st-img
ie8及以上
shequ.stmicroelectronics.cn
  • ST意法半导体官网
  • STM32中文官网
  • ST全球论坛
登录/注册
  • 首页
  • 技术问答
  • 话题
  • 资源
  • 创客秀
  • 视频
  • 标签
  • 积分商城
  • 每日签到
Alf·Romeo

Alf·Romeo

 

回答数 0 关注数 0
关注 私信
  • 动态99
  • 提问
  • 回答0
  • 创客秀 0
  • 分享 0
  • 关注0
1 回答

ADC差分采样

STM32L4 ADC
xmshao xmshao 最优答案 回答时间: 2025-5-9 16:31

假设你的VREF+=VDD, VREF-=GND,做差分采样的话,结果还是在0~4095间变化。 不过,转换结果0对应的是INP接GND,INN接VREF时的情形; 结果4095对应的是INP接VREF,INN接GND时的情形; 当INP=INN时的转换结果则是2048; 假设你现在每次的ADC结果放在dat变量里,你计算那个电阻两端的电压时,应该是 ResultF=((int32_t)(dat-2048)/2028.)*vref;   uint32_t ADC_Buf8]; float ResultF=0.0; 下面我这边的测试结果。 Case 1: VINP=VREF, VINN=GND; 对于第三种情形,我搞一根导线将二者连接起来的,测试结果来看,压差将近5mv。

赞0
1 回答

SD卡格式化出错

STM32L4
星海灿烂 星海灿烂 回答时间: 2024-12-28 08:35

STM32L151RDT6 SDIO读写SD卡 FIFO下溢错误,不知是什么原因 参考这个文章;

赞0
1 回答

RTC小时时间大于24小时

STM32L4
butterflyspring butterflyspring 回答时间: 2024-12-3 14:57

观察一下寄存器,最好提供一下前后的寄存器截图。

赞0
1 回答

STM32L431进入STOP1模式后ADC产生多余功耗

STM32L4 DMA ADC
xmshao xmshao 最优答案 回答时间: 2024-11-22 16:50

输出手册里有个关于各个外设的功耗表格,类似下面的: 如果使用ADC的,至少得开启ADC和相关管脚GPIO的时钟,如果说用到DMA的话,DMA也要增加功耗。你可以结合上面表格估算下。

赞0
5 回答

DMA发送函数只能被调用一次

STM32L4 DMA UART
xmshao xmshao 最优答案 回答时间: 2024-11-18 15:35

这个话题说起来有点长。 在STM32HAL库里定义很多状态变量,用于对各自外设模块的状态管理,比方ready,busy,idle,timeout,error等, 以便正确使用各个外设,避免使用上的混乱。 以usart为例,库里为USART的发送、接收操作分别定义了两个状态变量,即gState和RxState。其中gState表示USART的发送状态,RxState表述接收时可能的状态。 是ready还是busy或其它出错、超时状态。USART初始化后gState为reddy状态,当要调用UART发送函数时软件将其设置为Busy. 当usart完成发送或中止发送时,软件将gState设置回Ready。 如果说你调用的查询式发送函数,即HAL_UART_Transmit(),则在该函数里查询到数据发送完毕或发生超时都会将gState设置为Ready. 如果说你调用的是中断式发送函数,即HAL_UART_Transmit_IT(),同时你沿用CubeMx创建的中断服务程序代码框架,在相应的发送中断服务程序 里检测到发送完毕时,也会将gState修改为ready为下次发送做准备。 如果说你调用API函数是HAL_UART_Transmit_IT(),而中断服务程序是另外组织的, 要记得在发送完成时将gState改为Ready,不然下次调用HAL_UART_Transmit_IT()函数会因为gstate检查不通过而不能得以执行。 如果说你调用的是DMA方式发送函数,即HAL_UART_Transmit_DMA(),同样,也沿用CubeMx创建的中断服务程序代码框架,且开启了DMA完成中断和UART事件的中断, 在相应的DMA完成中断代码里也会适时地将gState从busy改为ready。如果说,你虽然调用了HAL_UART_Transmit_DMA()函数,但没有开启DMA完成中断, 也没有在适当的位置将gState改为ready,这时就会发生即使你多次调用HAL_UART_Transmit_DMA()函数而只会做一次发送的情形。因为在后续的 HAL_UART_Transmit_DMA()函数里做gState检查发现是busy而强行退出。当然,这时手动将其改为Ready也是可以的,但要保证合适的时间点。 比方,我就是不想开启DMA相关中断,只是想通过DMA方式发送几次字符串而已,像下面这样         HAL_UART_Transmit_DMA(&huart2, (uint8_t *)String1,  sizeof(String1));         HAL_Delay(200);                         huart2.gState = HAL_UART_STATE_READY;                    huart2.hdmatx->State = HAL_DMA_STATE_READY;         __HAL_UNLOCK(huart2.hdmatx);             HAL_UART_Transmit_DMA(&huart2, (uint8_t *)String2,  sizeof(String2));                   HAL_Delay(200);                   huart2.gState = HAL_UART_STATE_READY;                  huart2.hdmatx->State = HAL_DMA_STATE_READY;         __HAL_UNLOCK(huart2.hdmatx); 当然,这里还有一种情况,尽管当我们基于中断或DMA方式调用UART发送,也开启了相关中断并沿用库函数的写法,还是可能出现只有第一次发送有效的 情况,比方像下面这样:       HAL_UART_Transmit_DMA(&huart2, (uint8_t *)String1,  sizeof(String1));        HAL_UART_Transmit_DMA(&huart2, (uint8_t *)String2,  sizeof(String2));        HAL_UART_Transmit_DMA(&huart2, (uint8_t *)String3,  sizeof(String3)); 这里的三次调用太近了,第一次调用时软件将gstate改为busy,当运行第二个第三个调用时,第一次的uart发送可能根本没有完成,自然也就没法 基于它的完成中断将gstate改为ready,这样导致后续的两次调用都无效了。所以像这种情况,第二次调用前要确保上次传输完成了。 整体上,上面分析了两种可能的情形,请结合你的代码检查下,看看是哪种原因或是还是别的什么原因。 DMA发送函数只能第一次调用有效?

赞0
9 回答

STM32L431在STOP2模式下能否将串口的RX配置成EXTI唤醒呢?为什么我的唤醒不了呢?并且空闲中断也不能用

STM32L4 UART
Alf·Romeo Alf·Romeo 回答时间: 2024-11-4 11:14

[md]对啊,我上面的代码就是这样写的呀

赞0
0 回答

有使用过芯讯通的A7680C这个4G模块吗?

通讯
5 回答

stm32l431驱动段码屏

STM32L4
云小饮 云小饮 回答时间: 2024-7-10 16:15

屏幕型号都没有吗?

赞0
0 回答

求助一个脚本语言

STM32G4
Alf·Romeo Alf·Romeo


阅读作者更多的帖子

所在话题

参与活动

  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    线下 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    网络 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    网络 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    网络 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    线下 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    线下 2020-10-16