完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
目前以STM8S003F芯片做作为主机MCU 控制从机Elmos524.09超声波雷达芯片,做一款汽车倒车雷达系统;在开发时遇到了一点问题: 主机与从机之间通过特定的IO引脚进行通讯,通过引脚低电平时间的长短进行数据交流。目前主机可以正常的通过IO引脚向从机发送指令,从机也可以正常的返回相应的数据,且在IO引脚上的示波器也检测出了相应的波形;但是问题在于,在从机返回相应的数据波形以后,主机在检测引脚电平变化(也就是读取数据时),始终无法获取相应的电平信息,通过IAR编译器的DEBUG功能时。发现芯片在检测无法检测到电平的上升沿,以至于程序超时。系统采用us级的计数方式,示波器波形、硬件电路设计、接收函数代码在图片和附件中;求大佬指点!!
u16 receive_status_data(GPIO_TypeDef * GPIOx, GPIO_Pin_TypeDef PortPins) { uint16_t start_time, low_time;uint16_t fall_edge = 0;uint16_t rise_edge = 0;uint16_t data = 0;u16 volatile tnow=0; uint8_t bit_count = 15;GPIO_Init(GPIOx, PortPins, GPIO_MODE_OUT_PP_HIGH_FAST);Tim2_init();start_time = TIM2_GetCounter();// 读取10位状态数据for (int i = 0; i < bit_count; i++) {// 等待下降沿start_time = TIM2_GetCounter();// while ( 0 != GPIO_ReadInputPin(GPIOx, PortPins)){while ((GPIOx->IDR & PortPins)!=0){tnow = TIM2_GetCounter();if(tnow > start_time){if((tnow - start_time) >= 2000 ){ return 0xFFFF;}}else {if((0xFFFF -start_time +tnow) >=2000){ return 0xFFFF;}} } fall_edge = TIM2_GetCounter(); // 等待上升沿GPIO_WriteHigh(GPIOA, GPIO_PIN_3);while ( (GPIOx->IDR & PortPins) == 0){// while ((GPIOx->IDR & PortPins)==0){tnow = TIM2_GetCounter();if(tnow > start_time){if((tnow - start_time) >= 2000 ){GPIO_WriteLow(GPIOA, GPIO_PIN_3);return 0xFFFF;}}else {if((0xFFFF -start_time +tnow) >=2000){ return 0xFFFF;}} }rise_edge = TIM2_GetCounter(); low_time = rise_edge - fall_edge; // 低电平时间// data_cmd.cdm=low_time;// 判断逻辑值data_cmd.cdm=low_time;if (low_time >= 95 && low_time <= 105) {data |= (0 << (bit_count - 1 - i)); // 0} else if (low_time >= 47 && low_time <= 52) {data |= (1 << (bit_count - 1 - i)); // 1} else {return 0xFFFF; // 无效位} }// enableInterrupts(); TIM2_Cmd(DISABLE); echo.encho_data= data; return data; } |
|
相关推荐
1个回答
|
|
|
针对STM8S003F无法检测到从机Elmos524.09返回引脚电平的问题,以下是逐步排查和解决方案: 1. 确认GPIO配置正确
2. 验证电气信号
3. 检查时序同步
4. 排查中断冲突
5. 排除硬件冲突
6. 软件逻辑优化
7. 使用高级检测方法
8. 示波器辅助调试
9. 参考Elmos524.09手册
10. 代码示例(简化版)通过以上步骤,应能定位并解决电平检测失败的问题。建议优先检查GPIO模式切换和信号电压,再逐步深入时序和中断配置。 |
|
|
|
|
只有小组成员才能发言,加入小组>>
stm32mp157的异核通信的rpmsg_sdb的m4固件和a7驱动该如何编写?
1447 浏览 0 评论
stm32f103用freertos对一个采样率为1kHz的传感器,进行采样,数据出差
1494 浏览 0 评论
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
3641 浏览 1 评论
3834 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
2454 浏览 1 评论
STM32H7打开DCache后,出现了串口接收信息为空的现象,是哪里出了问题?
727浏览 5评论
用NANO STM32F103RBT6的开发板烧录不了是哪里出了问题?
658浏览 5评论
710浏览 5评论
外部中断触发类型为双边沿触发,进入中断回调后有什么办法判断该边沿是上升沿还是下降沿?
940浏览 5评论
STM32L071CBT6低温环境下无法正常工作是什么原因引起的?
744浏览 5评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 18:41 , Processed in 0.661112 second(s), Total 76, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1080