1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我正在使用 HAL_I2C_Slave_Receive_DMA() 函数并在每个回调中放置标志,我在我的代码中从 STM32g0xx_hal_i2c.c 中的弱回调中重新定义了这些回调。
我也试过在回调函数中放置断点,看看它是否在那里。 没有迹象表明它是。 我的 HAL_UART_Transmit_DMA() 函数正在运行。它正在调用 HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) 函数。 所以我知道中断已打开。我不必在 HAL 处理的中断中启用任何内容。 我进入 stm32g0xx_hal_conf.c 并修改了行 #define USE_HAL_I2C_REGISTER_CALLBACKS 1u 所以它使用了所有的回调。 查看 hi2c1 结构,每个回调指针中都有有效地址。现在我无法验证他们使用的是默认的弱者还是我的。但是根据文档,如果我定义它们,它们应该覆盖弱的。 当我在主 STM32G031K8 中使用 HAL_I2C_Mem_Write_DMA() 时,数据在从属中正确显示,但我看不到任何回调已执行。 当我在主机中使用 HAL_I2C_Mem_Read_DMA() 时,写入的数据在从缓冲区中正确显示,直到重新启动后,它挂起,因为我没有任何回调指示我需要做任何事情,比如读取数据并写回结果。 这告诉我 I2C 设备已启用。但什么也没有发生。 使用 UART,我不必进入配置寄存器并启用各个中断,HAL 会这样做。I2C 不是这样吗? 我正在使用 HAL_Delay() 函数。所以我将 UART 和 I2C 中断设置为 3 级优先级。 我将 DMA 中断设置为 2 级优先级。 我将 sys_tick 中断级别设置为 1。 其余保持默认 0。 我目前只使用 UART 和 I2C。没有 ADC,也没有定时器。没有其他外设中断。 在 UM2319 Rev 2 的第 341/2202 页上,它说“配置优先级并为 DMA Tx 或 Rx 通道上的传输完成中断启用 NVIC。” 如上所述,我设定了优先级。我启用了中断并在 MX 程序中设置了优先级。我还需要做其他事情吗?有关详细信息的文档非常少。 HAL_I2C_Slave_Receive_DMA() 函数是我在等待带有我的设备地址的数据出现在总线上时应该使用的函数吗?或者我应该使用 HAL_I2C_Slave_Seq_Receive_DMA() 吗?文档不是很清楚这两个函数的优缺点。 在搜索如何解决此问题时,我发现了另一个使用 AddrCallback() 来查看设备是否被访问的示例。然后他们根据地址和方向做了一些事情。我的比较简单。在大多数情况下,它看起来像一个 16 位内存位置,他们发送一个 16 位地址,并获得 16 位响应。所以我知道他们总是会至少给我发送两个字节。如果它是一个写它可能是 2 更多。如果是读,那么他们将发送一个重启,并且地址带有一个读。那么应该发生什么中断让我知道我应该发送一些东西? 回到最初的问题,我可以缺少什么来阻止回调被执行? |
|
相关推荐
1个回答
|
|
回调似乎有效。只是不是我的预期。
这个图像是逻辑分析仪看到的。Master 正在执行具有 2 个地址位和 2 个数据位的 HAL_I2C_Mem_Write_DMA()。这正是我想看到的。 我一直在使用 HAL_I2C_Slave_Receive_DMA() 来获取它。当我让字符接收大于 4 个字节(接收)时,我没有得到 HAL_I2C_SlaveRxCpltCallback() 但我刚刚发现我得到了 HAL_I2C_ErrorCallback() 并且接收缓冲区中的值是正确的。从未调用过 HAL_I2C_AddrCallback()。 当 HAL_I2C_Slave_Receive_DMA() 正好是 4 个字节时,我得到 HAL_I2C_SlaveRxCpltCallback()。并且接收缓冲区中的值是正确的。从未调用过 HAL_I2C_AddrCallback()。 当 HAL_I2C_Slave_Receive_DMA() 正好是 2 个字节时,我没有得到任何回调。 我的问题是我不知道是读取还是写入,所以我不知道要读取多少字节。I2C_TwoBoards_ComDMA 是用于与两个板进行通信的糟糕示例。这是不现实的。 看来您必须在阅读之前知道有多少数据即将到来。 |
|
|
|
只有小组成员才能发言,加入小组>>
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
2730 浏览 1 评论
3239 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
1808 浏览 1 评论
3647 浏览 6 评论
6035 浏览 21 评论
1339浏览 4评论
198浏览 3评论
对H747I-DISCO写程序时将CN2的st-link复用为usart1,再次烧录时无法检测到stlink怎么解决?
350浏览 2评论
STM32G474RE芯片只是串口发个数据就发烫严重是怎么回事?
442浏览 2评论
STM32处理增量式编码器Z信号如何判断中断是正转的还是反向转的?
273浏览 2评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 08:29 , Processed in 1.230099 second(s), Total 76, Slave 60 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号