完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
大家好,
我正在尝试使用 CubeMX 和 HAL 库让两个 STM32F411E 发现板通过 SPI 相互通信。在第一步中,我只是尝试正确配置主机。我想用主机的标准 GPIO 引脚驱动从机的 NSS 引脚,为此在 while 循环中有以下代码: 而 (1) { slaveStatus = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_4); // 检查状态 1 HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, GPIO_PIN_SET); // 激活从机 slaveStatus = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_4); // 检查状态 2 HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, GPIO_PIN_RESET); //停用奴隶 slaveStatus = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_4); // 检查状态 3 } slaveStatus 被设置为全局变量,因此我可以在 Keil 调试器中使用断点监视它的值。在 while 循环的第一次运行期间,一切都很好。对于检查状态 1,GPIO 引脚首先为高电平,然后在检查状态 2 期间为低电平,在循环结束时再次为检查状态 3 高电平。但是,对于所有后续循环,对于检查状态 1,slaveStatus 将始终为 0。 在不同的论坛上转了一下午,我发现有时像这样的问题是因为没有配置上拉/下拉引起的,但我很确定这不是我的问题。我已经尝试了此引脚的 GPIO 配置的所有可能组合,甚至切换到另一个引脚,但无济于事。看起来引脚在每个周期之间都变低了,但我不知道为什么。 任何关于我可以尝试补救这种情况的建议将不胜感激。 |
|
相关推荐
1个回答
|
|
> 在第一次运行 while 循环时,一切正常。GPIO 引脚首先在检查状态 1 时为高电平,然后在检查状态 2 期间为低电平,在循环结束时再次为检查状态 3 高电平。
不,那不好。 当以检查状态 1 进入循环时,引脚状态当然取决于之前执行的代码留下的任何状态。如果在进入循环之前没有被触摸,引脚状态应该是低电平。 该引脚在检查状态 2 之前设置为高电平,因此它应该读回 1(高电平)。 该引脚在检查状态 3 之前被重置,因此此时它应该读回 0。 然后检查状态 3 紧接着是检查状态 1,所以结果应该是相同的。 当引脚配置为推挽输出时,上拉无效。 另请注意,外设通常在低电平信号上激活,在高电平信号上停用。检查从站的数据表以确定。 |
|
|
|
只有小组成员才能发言,加入小组>>
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
2612 浏览 1 评论
3201 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
1775 浏览 1 评论
3600 浏览 6 评论
5980 浏览 21 评论
930浏览 4评论
1307浏览 4评论
在Linux上安装Atollic TRUEStudio的步骤有哪些呢?
575浏览 3评论
使用DMA激活某些外设会以导致外设无法工作的方式生成代码是怎么回事
1294浏览 3评论
1349浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-18 20:19 , Processed in 0.982582 second(s), Total 47, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号