找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1969|回复: 1
收起左侧

STM32F10X ModBus RTU master code

[复制链接]
ID:656243 发表于 2019-12-4 20:39 | 显示全部楼层 |阅读模式
代码经测试有效  可参考

单片机源程序如下:

  1. #include "main.h"
  2. #include "stm32f0xx_hal.h"
  3. #include "modbus_master.h"
  4. /* USER CODE BEGIN Includes */

  5. /* USER CODE END Includes */

  6. /* Private variables ---------------------------------------------------------*/
  7. UART_HandleTypeDef huart2;

  8. /* USER CODE BEGIN PV */
  9. /* Private variables ---------------------------------------------------------*/

  10. /* USER CODE END PV */

  11. /* Private function prototypes -----------------------------------------------*/
  12. void SystemClock_Config(void);
  13. static void MX_GPIO_Init(void);
  14. static void MX_USART2_UART_Init(void);

  15. /* USER CODE BEGIN PFP */
  16. /* Private function prototypes -----------------------------------------------*/

  17. /* USER CODE END PFP */

  18. /* USER CODE BEGIN 0 */

  19. /* USER CODE END 0 */

  20. int main(void)
  21. {
  22.   uint8_t state=0;
  23.         uint16_t  Input_Result[2];
  24.   HAL_Init();
  25.   SystemClock_Config();
  26.   MX_GPIO_Init();
  27.         ModbusMaster_begin();
  28.   MX_USART2_UART_Init();
  29.   
  30.   while (1)
  31.   {
  32.                 uint8_t result;
  33.                 //测试Read Input Registers功能
  34.                 //从机地址0x01 ,寄存器地址 0x02 ,连续读2个寄存器地址
  35.                 result = ModbusMaster_readInputRegisters(0x01,0x2, 2);
  36.                 if (result == 0x00)
  37.                 {
  38.                         Input_Result[0] = ModbusMaster_getResponseBuffer(0x00);
  39.                         Input_Result[1] = ModbusMaster_getResponseBuffer(0x01);
  40.                 }
  41.                         HAL_Delay(1000);
  42.   }

  43. }

  44. /** System Clock Configuration
  45. */
  46. void SystemClock_Config(void)
  47. {

  48.   RCC_OscInitTypeDef RCC_OscInitStruct;
  49.   RCC_ClkInitTypeDef RCC_ClkInitStruct;

  50.     /**Initializes the CPU, AHB and APB busses clocks
  51.     */
  52.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI48;
  53.   RCC_OscInitStruct.HSI48State = RCC_HSI48_ON;
  54.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
  55.   if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  56.   {
  57.     _Error_Handler(__FILE__, __LINE__);
  58.   }

  59.     /**Initializes the CPU, AHB and APB busses clocks
  60.     */
  61.   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  62.                               |RCC_CLOCKTYPE_PCLK1;
  63.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI48;
  64.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  65.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;

  66.   if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
  67.   {
  68.     _Error_Handler(__FILE__, __LINE__);
  69.   }

  70.     /**Configure the Systick interrupt time
  71.     */
  72.   HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);

  73.     /**Configure the Systick
  74.     */
  75.   HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

  76.   /* SysTick_IRQn interrupt configuration */
  77.   HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
  78. }

  79. /* USART2 init function */
  80. static void MX_USART2_UART_Init(void)
  81. {

  82.   huart2.Instance = USART2;
  83.   huart2.Init.BaudRate = 115200;
  84.   huart2.Init.WordLength = UART_WORDLENGTH_8B;
  85.   huart2.Init.StopBits = UART_STOPBITS_1;
  86.   huart2.Init.Parity = UART_PARITY_NONE;
  87.   huart2.Init.Mode = UART_MODE_TX_RX;
  88.   huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  89.   huart2.Init.OverSampling = UART_OVERSAMPLING_16;
  90.   huart2.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  91.   huart2.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  92.   if (HAL_UART_Init(&huart2) != HAL_OK)
  93.   {
  94.     _Error_Handler(__FILE__, __LINE__);
  95.   }
  96.   __HAL_UART_ENABLE_IT(&huart2,UART_IT_RXNE);
  97. }

  98. /** Configure pins as
  99.         * Analog
  100.         * Input
  101.         * Output
  102.         * EVENT_OUT
  103.         * EXTI
  104. */
  105. static void MX_GPIO_Init(void)
  106. {

  107.   /* GPIO Ports Clock Enable */
  108.   __HAL_RCC_GPIOA_CLK_ENABLE();

  109. }

  110. /* USER CODE BEGIN 4 */

  111. /* USER CODE END 4 */

  112. /**
  113.   * @brief  This function is executed in case of error occurrence.
  114.   * @param  None
  115.   * @retval None
  116.   */
  117. void _Error_Handler(char * file, int line)
  118. {
  119.   /* USER CODE BEGIN Error_Handler_Debug */
  120.   /* User can add his own implementation to report the HAL error return state */
  121.   while(1)
  122.   {
  123.   }
  124.   /* USER CODE END Error_Handler_Debug */
  125. }

  126. #ifdef USE_FULL_ASSERT

  127. /**
  128.    * @brief Reports the name of the source file and the source line number
  129.    * where the assert_param error has occurred.
  130.    * @param file: pointer to the source file name
  131.    * @param line: assert_param error line source number
  132.    * @retval None
  133.    */
  134. void assert_failed(uint8_t* file, uint32_t line)
  135. {
  136.   /* USER CODE BEGIN 6 */
  137.   /* User can add his own implementation to report the file name and line number,
  138.     ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  139.   /* USER CODE END 6 */

  140. }

  141. #endif

  142. /**
  143.   * @}
  144.   */

  145. /**
  146.   * @}
  147. */

  148. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

复制代码

所有资料51hei提供下载:
ModBus-Master-master.7z (1.19 MB, 下载次数: 72)
回复

使用道具 举报

ID:111310 发表于 2021-8-27 01:04 | 显示全部楼层
有从站的吗?
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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