打印
[STM8]

STM8S003无法检测到电平的引脚变化

[复制链接]
229|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 Sujunelf 于 2025-4-2 10:54 编辑

  目前以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.png (35.07 KB )

驱动 /接收引脚

驱动 /接收引脚

k5.png (67.46 KB )

芯片引脚定义

芯片引脚定义

c99021bd9df8c3f26db61512b0ff49a.jpg (638.46 KB )

接收引脚波形

接收引脚波形

使用特权

评论回复
沙发
elephant00| | 2025-4-3 11:42 | 只看该作者
检查引脚是否被正确配置为输入模式。

使用特权

评论回复
板凳
elephant00| | 2025-4-3 11:42 | 只看该作者
如果需要使用这些引脚作为外部中断的触发引脚,建议更换为上拉电阻的引脚或外部添加上拉电阻。

使用特权

评论回复
地板
两只袜子| | 2025-4-3 12:35 | 只看该作者
检查引脚的中断配置是否正确。

使用特权

评论回复
5
两只袜子| | 2025-4-3 13:48 | 只看该作者
电源不稳定或接地不良可能会导致引脚电平检测不准确。

使用特权

评论回复
6
jcky001| | 2025-4-3 15:25 | 只看该作者
检查与STM8S003引脚相连的外部电路是否存在问题,如接触不良、短路或开路等。

使用特权

评论回复
7
flycamelaaa| | 2025-4-3 19:56 | 只看该作者
引脚功能冲突?

使用特权

评论回复
8
cr315| | 2025-4-3 22:00 | 只看该作者
检查软件配置包括时钟设置、中断使能、引脚初始化等。

使用特权

评论回复
9
laocuo1142| | 2025-4-3 22:00 | 只看该作者
使用示波器看看是否由硬件或软件引起。

使用特权

评论回复
10
powerantone| | 2025-4-3 22:00 | 只看该作者
估计是芯片坏了,换一个芯片吧。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝