STM32CubeMX RS485接口使用

一、基本知识

  1. TTL(Transistor-Transistor Logic)

    • 电平范围: 逻辑1对应于2.4V–5V,逻辑0对应于0V–0.5V。
    • 通信特点: 全双工。
    • 特点: 常见于单片机和微控制器的IO电平,USB转TTL模块通常是将USB转为TTL电平的串口模块。
  2. RS485

    • 电平范围: 逻辑1对应于+2V–+6V,逻辑0对应于-6V—2V。
    • 通信特点: 半双工。
    • 特点: RS485采用差分信号传输,通过AB两根线的电压差表示电平信号。由于差分信号的特性,RS485具有较好的抗干扰性能,可以允许多达128个收发器连接在同一总线上。

STM32CubeMX RS485接口使用_第1张图片

二、cubemx配置

STM32CubeMX RS485接口使用_第2张图片

时钟配置

STM32CubeMX RS485接口使用_第3张图片

STM32CubeMX RS485接口使用_第4张图片

引脚使能 PD5是LED小灯,高电平有效,PD4是485发送使能,高电平有效,PD4低电平默认接收

输出模式选择推挽输出

STM32CubeMX RS485接口使用_第5张图片

 串口一配置,默认即可

STM32CubeMX RS485接口使用_第6张图片

 生成工程代码

STM32CubeMX RS485接口使用_第7张图片

STM32CubeMX RS485接口使用_第8张图片

三、代码

main.c中

 添加串口回调函数

/* USER CODE BEGIN 0 */

uint8_t a[10];
 
//空闲中断回调函数,参数Size为串口实际接收到数据字节数
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{
	if(huart->Instance==USART1)
	{	  
		HAL_GPIO_WritePin(GPIOD, GPIO_PIN_4, GPIO_PIN_SET);    //将485芯片设置为发送模式
		
		//把收到的一包数据通过串口回传
		HAL_UART_Transmit(&huart1,a,Size,0xff);
		
    HAL_GPIO_WritePin(GPIOD, GPIO_PIN_4, GPIO_PIN_RESET);		//将485芯片设置为接收模式
		//再次开启空闲中断接收,不然只会接收一次数据
		HAL_UARTEx_ReceiveToIdle_IT(&huart1,a,sizeof(a));
	}
}

/* USER CODE END 0 */

主函数中添加第一次中断接收

  /* USER CODE BEGIN 2 */

	HAL_UARTEx_ReceiveToIdle_IT(&huart1,a,sizeof(a));//空闲中断接收

  /* USER CODE END 2 */

while中进行小灯状态翻转

 /* USER CODE BEGIN WHILE */
  while (1)
  {
	HAL_GPIO_TogglePin(GPIOD,GPIO_PIN_5);
		HAL_Delay(100);	
    /* USER CODE END WHILE */

 运行效果截图

STM32CubeMX RS485接口使用_第9张图片

链接: https://pan.baidu.com/s/1ulrCptVIZOq7dkZ3uFwzZA?pwd=tw5v 提取码: tw5v 

你可能感兴趣的:(STM32CubeMX,stm32,嵌入式硬件,单片机)