串口是接在PB6/PB7上的,因为串口需要和外部5V的芯片通讯,所以需要设置为开漏,
我也看到软件工程师已经设置了,但输出还是3.3V,串口复用设置成开漏难道还有什么窍门?
这两个引脚是容忍5V的
关于这一点可以参考
https://zhidao.baidu.com/question/813327849757663612.html
配置程序:
void HAL_UART_MspInit(UART_HandleTypeDef* huart) { GPIO_InitTypeDef GPIO_InitStruct; if(huart->Instance==USART1) { /* USER CODE BEGIN USART1_MspInit 0 */ /* USER CODE END USART1_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_USART1_CLK_ENABLE(); /**USART1 GPIO Configuration PB6 ------> USART1_TX PB7 ------> USART1_RX */ GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; GPIO_InitStruct.Alternate = GPIO_AF0_USART1; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); /* USER CODE BEGIN USART1_MspInit 1 */ /* USER CODE END USART1_MspInit 1 */ } } 但为了提高安全性,一般都会使用光耦进行隔离或是上拉或是串个电阻。
1、要复用所以才能使用PB6/PB7,因为这不是它第一功能引脚。
2、开漏一般设置是用于和外部通信,比如spi,模拟i2c。
3、开漏的时候电平是不确定的,靠外部器件把它拉高拉低。这就是一般的数字通信方式。
如果出现这种情况,那就是某些引脚不允许使用开漏式输出,即使设置了也是这样
STM32一般每个串口会对应两对IO,你可以使用另外一对,或者是额外加一个电平转换器,将其转换为5V
STM32 I/O口本來就是輸出3.3V了...
只是部分I/O可以容忍5V輸入而已
若只是簡單訊號輸出(非大負載),只要接一個NPN進行電流放大,然後產生5V壓降即可
注意此組態會是反邏輯,即IN=1,OUT是拉到地,而IN=0時,OUT拉到VCC
以上
当引脚用于输出连接上拉电阻(也就是说当与5V系统接口时)时配置成开漏输出。不能的原因是不是这个引脚不能设置成5v。
需要在电路额外加一个电平转换器,即加一个5V上拉电阻。
这样才能设置成5V,感觉是楼主疏忽了。
楼主,这个还是硬件工程师的问题。
您了测的那个3.3v 也不一定是准的。或者,硬件工程师把它上拉到了3.3v