OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3094|回复: 1

SP3485CN DI 无法输出低电平(与STM32F407连接)

[复制链接]

1

主题

7

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2018-7-1
在线时间
9 小时
发表于 2023-6-9 10:35:57 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 hjywlj 于 2023-6-9 10:42 编辑

最近在开发一个通讯项目,使用STM32F407VGT6与SP3485CN实现RS485的Moudbus RTU通讯,原理图如下。在调试过程中,发现SP3485的DI端口无法输出低电平,在A,B上接收到信号后,DI端的幅值尽在高电平附近下拉一点点(最低幅值在2V以上),但是有脉冲波形。下面有HAL库的配置截图和代码。请高手指点迷津,不胜感激。PS:如果仅仅配置了USART3,但是不使能USART3及中断的话,可以正常输出波形。      

        



05.png 04.png 03.png 02.png 01.png

  1. void USART3_Init(uint32_t  baud,uint8_t  bits,uint8_t  parity,uint8_t  stops)
  2. {

  3.   /* USER CODE BEGIN USART3_Init 0 */

  4.   /* USER CODE END USART3_Init 0 */

  5.   /* USER CODE BEGIN USART3_Init 1 */

  6.   /* USER CODE END USART3_Init 1 */
  7.           huart3.Instance = USART3;
  8.           huart3.Init.BaudRate = 115200;
  9.           huart3.Init.WordLength = UART_WORDLENGTH_8B;
  10.           huart3.Init.StopBits = UART_STOPBITS_1;
  11.           huart3.Init.Parity = UART_PARITY_NONE;
  12.           huart3.Init.Mode = UART_MODE_TX_RX;
  13.           huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  14.           huart3.Init.OverSampling = UART_OVERSAMPLING_16;
  15.           if (HAL_UART_Init(&huart3) != HAL_OK)
  16.           {
  17.             Error_Handler();
  18.           }
  19.   /* USER CODE BEGIN USART3_Init 2 */
  20.         __HAL_UART_ENABLE(&huart3);
  21.         __HAL_UART_CLEAR_FLAG(&huart3,UART_FLAG_TC);
  22.         __HAL_UART_ENABLE_IT(&huart3,UART_IT_RXNE);
  23.         __HAL_UART_ENABLE_IT(&huart3,UART_IT_TC);
  24.         USART3_RS485_RX_EN();
  25.   /* USER CODE END USART3_Init 2 */

  26. }
复制代码
  1. else if(uartHandle->Instance==USART3)
  2.   {
  3.           /* USER CODE BEGIN USART3_MspInit 0 */

  4.             /* USER CODE END USART3_MspInit 0 */
  5.               /* USART3 clock enable */
  6.               __HAL_RCC_USART3_CLK_ENABLE();

  7.               __HAL_RCC_GPIOD_CLK_ENABLE();
  8.               /**USART3 GPIO Configuration
  9.               PD8     ------> USART3_TX
  10.               PD9     ------> USART3_RX
  11.               */
  12.               GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9;
  13.               GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  14.               GPIO_InitStruct.Pull = GPIO_NOPULL;
  15.               GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  16.               GPIO_InitStruct.Alternate = GPIO_AF7_USART3;
  17.               HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);

  18.               /* USART3 interrupt Init */
  19.               HAL_NVIC_SetPriority(USART3_IRQn, 2, 0);
  20.               HAL_NVIC_EnableIRQ(USART3_IRQn);
  21.             /* USER CODE BEGIN USART3_MspInit 1 */

  22.             /* USER CODE END USART3_MspInit 1 */
  23.   }
复制代码




最佳答案

查看完整内容[请看2#楼]

找到了原因,PD8和PD9要设置成OD和POULLDOWN才行,在CubeMX中的配置没有更新到代码里。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2018-7-1
在线时间
9 小时
 楼主| 发表于 2023-6-9 10:35:58 | 显示全部楼层
找到了原因,PD8和PD9要设置成OD和POULLDOWN才行,在CubeMX中的配置没有更新到代码里。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-24 11:11

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表