[STM32F1] 有没有串口模拟lin芯片的例程啊

[复制链接]
900|4
 楼主| 班杰明 发表于 2024-2-26 17:30 来自手机 | 显示全部楼层 |阅读模式
标准库hal库都可以
Henryko 发表于 2024-2-29 23:17 | 显示全部楼层
这个应该很简单的
裤脚口感好 发表于 2024-3-31 00:54 | 显示全部楼层
使用HAL库的STM32串口模拟LIN通信的简单例程:

  1. #include "stm32f4xx_hal.h"

  2. UART_HandleTypeDef huart2;

  3. void SystemClock_Config(void);
  4. static void MX_GPIO_Init(void);
  5. static void MX_USART2_UART_Init(void);

  6. int main(void)
  7. {
  8.   HAL_Init();
  9.   SystemClock_Config();
  10.   MX_GPIO_Init();
  11.   MX_USART2_UART_Init();
  12.   
  13.   uint8_t data[8] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07};
  14.   
  15.   while (1)
  16.   {
  17.     HAL_UART_Transmit(&huart2, data, sizeof(data), HAL_MAX_DELAY); // 发送数据
  18.    
  19.     HAL_Delay(10); // 模拟LIN的帧间隔时间
  20.   }
  21. }

  22. void SystemClock_Config(void)
  23. {
  24.   RCC_OscInitTypeDef RCC_OscInitStruct;
  25.   RCC_ClkInitTypeDef RCC_ClkInitStruct;

  26.   __HAL_RCC_PWR_CLK_ENABLE();
  27.   __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

  28.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  29.   RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  30.   RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
  31.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  32.   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
  33.   RCC_OscInitStruct.PLL.PLLM = 16;
  34.   RCC_OscInitStruct.PLL.PLLN = 336;
  35.   RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV4;
  36.   RCC_OscInitStruct.PLL.PLLQ = 7;
  37.   if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  38.   {
  39.     Error_Handler();
  40.   }

  41.   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  42.                               |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  43.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  44.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  45.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
  46.   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

  47.   if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK)
  48.   {
  49.     Error_Handler();
  50.   }
  51. }

  52. static void MX_USART2_UART_Init(void)
  53. {
  54.   huart2.Instance = USART2;
  55.   huart2.Init.BaudRate = 9600;
  56.   huart2.Init.WordLength = UART_WORDLENGTH_8B;
  57.   huart2.Init.StopBits = UART_STOPBITS_1;
  58.   huart2.Init.Parity = UART_PARITY_NONE;
  59.   huart2.Init.Mode = UART_MODE_TX;
  60.   huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  61.   huart2.Init.OverSampling = UART_OVERSAMPLING_16;
  62.   if (HAL_UART_Init(&huart2) != HAL_OK)
  63.   {
  64.     Error_Handler();
  65.   }
  66. }

  67. void Error_Handler(void)
  68. {
  69.   // 错误处理代码
  70. }

  71. #ifdef  USE_FULL_ASSERT
  72. void assert_failed(uint8_t *file, uint32_t line)
  73. {
  74.   // 用户自定义断言处理代码
  75. }
  76. #endif


是一个简单的例程,初始化了USART2作为UART通信接口,并使用HAL库中的函数HAL_UART_Transmit周期性发送数据以模拟LIN通信
裤脚口感好 发表于 2024-3-31 00:54 | 显示全部楼层
在STM32的标准库(Standard Peripheral Library)和HAL库(Hardware Abstraction Layer)中,都提供了串口(USART)的功能,可以用来模拟LIN(Local Interconnect Network)通信协议
裤脚口感好 发表于 2024-3-31 00:54 | 显示全部楼层
LIN是一种用于汽车电子系统的串行通信协议,常用于连接车辆内部的各种控制单元。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

194

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部