diff --git a/john103C6T6NewVer/Core/Inc/main.h b/john103C6T6NewVer/Core/Inc/main.h
index d1b7673..ef23d6c 100644
--- a/john103C6T6NewVer/Core/Inc/main.h
+++ b/john103C6T6NewVer/Core/Inc/main.h
@@ -48,7 +48,7 @@ extern "C" {
#define MODBUS_REG_ORDER_BE 0
#define MODBUS_REG_ORDER_LE 1
-#define USE_USART USART_1
+#define USE_USART USART_2
#define USART1_PA6_PA7
//#define USART1_PA9_PA10
diff --git a/john103C6T6NewVer/Core/Src/main.c b/john103C6T6NewVer/Core/Src/main.c
index 720975c..881d819 100644
--- a/john103C6T6NewVer/Core/Src/main.c
+++ b/john103C6T6NewVer/Core/Src/main.c
@@ -1,4 +1,4 @@
-/* USER CODE BEGIN Header */
+/* USER CODE BEGIN Header */
/**
******************************************************************************
* @file : main.c
@@ -75,6 +75,13 @@ DALLAS_SensorHandleTypeDef sens[30];
int init_sens = 0;
FlashRecord_t* record;
uint8_t flash_buff[RECORD_SIZE - 4];
+RS_HandleTypeDef hmodbus_master;
+RS_HandleTypeDef hmodbus_slave;
+RS_MsgTypeDef master_msg;
+RS_MsgTypeDef slave_msg;
+uint8_t master_modbus_uart_buff[MSG_SIZE_MAX];
+uint8_t slave_modbus_uart_buff[MSG_SIZE_MAX];
+uint32_t last_modbus_request_tick = 0;
/* USER CODE END PM */
@@ -174,21 +181,27 @@ int main(void)
{
.port = GPIOC,
.pin = GPIO_PIN_13,
- .blink_period = 10, // 100 мс
- .blink_count = 2 // 3 мигания
+ .blink_period = 10, // 100 РјСЃ
+ .blink_count = 2 // 3 мигания
};
LED_BlinkRx_Init(&led_rx);
BufferState_t buffer_init();
led_blink(GPIOC, 13, rest_iter, reset_blink_delay);
- MODBUS_FirstInit(&hmodbus1, &mb_huart, &mb_htim);
- MODBUS_Config(&hmodbus1, MODBUS_DEVICE_ID, MODBUS_TIMEOUT, MODBUS_MODE_SLAVE);
- // Запуск приема Modbus
- MODBUS_SlaveStart(&hmodbus1, NULL);
+ MODBUS_FirstInit(&hmodbus_master, &huart2, &htim2);
+ hmodbus_master.pBufferPtr = master_modbus_uart_buff;
+ MODBUS_Config(&hmodbus_master, MODBUS_DEVICE_ID, MODBUS_TIMEOUT, MODBUS_MODE_MASTER);
+
+ MODBUS_FirstInit(&hmodbus_slave, &huart1, NULL);
+ hmodbus_slave.pBufferPtr = slave_modbus_uart_buff;
+ MODBUS_Config(&hmodbus_slave, MODBUS_DEVICE_ID, MODBUS_TIMEOUT, MODBUS_MODE_SLAVE);
+ MODBUS_SlaveStart(&hmodbus_slave, &slave_msg);
+ // Запуск приема Modbus
+ master_msg = MB_REQUEST_READ_HOLDING_REGS(1, 0, 1);
uint8_t uart_byte = 0;
Dallas_BusFirstInit(&htim1);
- // ������������� �� ������� ��������� ��������
- // ������������� �� ������� (����������� ������ ���������� �������)
+ // пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ
+ // пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅ (пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅ)
reinit_t_sens();
init_setpoint_all_T_sense(temp_sense, hdallas.onewire->RomCnt);
@@ -205,21 +218,28 @@ int main(void)
/* USER CODE BEGIN WHILE */
while (1)
{
-
- if (MB_DATA.Coils.reserve3[3]==1)
+ if ((HAL_GetTick() - last_modbus_request_tick) >= 1000U)
+ {
+ if (MODBUS_MasterRequest(&hmodbus_master, &master_msg, NULL) == HAL_OK)
+ {
+ last_modbus_request_tick = HAL_GetTick();
+ }
+ }
+ if (MB_DATA.Coils.reserve3[3]==1)
{
MB_DATA.Coils.reserve3[3]=0;
LED_BlinkRx_Init(&led_rx);
}
-//////блинкер по приему RS
- if (hmodbus1.f.blink==1)
+//////блинкер по приему RS
+ if ((hmodbus_master.f.blink == 1) || (hmodbus_slave.f.blink == 1))
{
- hmodbus1.f.blink=0;
- LED_BlinkRx_OnRx();
+ hmodbus_master.f.blink = 0;
+ hmodbus_slave.f.blink = 0;
+ LED_BlinkRx_OnRx();
}
LED_BlinkRx_Process();
//////
-////// запись во флэш
+////// запись во флэш
if (MB_DATA.Coils.reserve3[0]==1)
{
MB_DATA.Coils.reserve3[0] = 0;
@@ -359,7 +379,7 @@ void init_cycle_counter(void) {
DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk;
}
-// Замер времени в тактах процессора
+// Замер времени в тактах процессора
uint32_t measure_execution_time_cycles(void (*func)(void)) {
uint32_t start = get_cycle_count();
func();
@@ -385,7 +405,7 @@ return reg_array;
void iwdg_refresh(void)
{
- IWDG->KR = 0xAAAA; // �������� ������
+ IWDG->KR = 0xAAAA; // пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅ
}
void led_blink(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, uint8_t iter, uint16_t delay)
{
@@ -421,7 +441,7 @@ void reinit_t_sens(void)
{
for ( int i = 0; i < hdallas.onewire->RomCnt; i++)
{
- // ������������� �� ROM-������
+ // пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅ ROM-пїЅпїЅпїЅпїЅпїЅпїЅ
//sens[i].Init.init_func = &Dallas_SensorInitByROM;
// sens[i].Init.InitParam.ROM = rom_address;
sens[i].Init.InitParam.Ind = i;
@@ -660,3 +680,5 @@ void assert_failed(uint8_t *file, uint32_t line)
/* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */
+
+
diff --git a/john103C6T6NewVer/Core/Src/stm32f1xx_it.c b/john103C6T6NewVer/Core/Src/stm32f1xx_it.c
index 8122531..c88181d 100644
--- a/john103C6T6NewVer/Core/Src/stm32f1xx_it.c
+++ b/john103C6T6NewVer/Core/Src/stm32f1xx_it.c
@@ -67,6 +67,8 @@ extern TIM_HandleTypeDef htim2;
extern UART_HandleTypeDef huart1;
extern UART_HandleTypeDef huart2;
extern TIM_HandleTypeDef htim3;
+extern RS_HandleTypeDef hmodbus_master;
+extern RS_HandleTypeDef hmodbus_slave;
/* USER CODE BEGIN EV */
@@ -273,7 +275,7 @@ void TIM1_CC_IRQHandler(void)
void TIM2_IRQHandler(void)
{
/* USER CODE BEGIN TIM2_IRQn 0 */
- RS_TIM_Handler(&hmodbus1);
+ RS_TIM_Handler(&hmodbus_master);
return;
/* USER CODE END TIM2_IRQn 0 */
HAL_TIM_IRQHandler(&htim2);
@@ -306,9 +308,7 @@ static uint8_t first_in=1;
void USART1_IRQHandler(void)
{
/* USER CODE BEGIN USART1_IRQn 0 */
- #if (USE_USART== USART_1)
- RS_UART_Handler(&hmodbus1);
- #endif
+ RS_UART_Handler(&hmodbus_slave);
@@ -328,9 +328,7 @@ void USART1_IRQHandler(void)
void USART2_IRQHandler(void)
{
/* USER CODE BEGIN USART2_IRQn 0 */
- #if (USE_USART== USART_2)
- RS_UART_Handler(&hmodbus1);
- #endif
+ RS_UART_Handler(&hmodbus_master);
/* USER CODE END USART2_IRQn 0 */
diff --git a/john103C6T6NewVer/Modbus/modbus_config.h b/john103C6T6NewVer/Modbus/modbus_config.h
index 9d5682b..889ab1a 100644
--- a/john103C6T6NewVer/Modbus/modbus_config.h
+++ b/john103C6T6NewVer/Modbus/modbus_config.h
@@ -1,21 +1,21 @@
-/**
+/**
******************************************************************************
* @file modbus_config.h
-* @brief Конфигурационные параметры Modbus устройства
+* @brief Конфигурационные параметры Modbus устройства
******************************************************************************
@addtogroup MODBUS_CONFIGS Modbus configs
@ingroup MODBUS
-@brief Конфигурация библиотеки
+@brief Конфигурация библиотеки
@{
******************************************************************************
* @details
-Файл содержит настройки для работы Modbus:
-- Подключение библиотек контроллера
-- ID устройства и таймауты
-- Строковые идентификаторы (Vendor, Product, Revision)
-- Настройки периферии (UART, TIMER)
-- Подключение модулей Modbus
-- Опциональные функции (переключение команд 0x03/0x04)
+Файл содержит настройки для работы Modbus:
+- Подключение библиотек контроллера
+- ID устройства и таймауты
+- Строковые идентификаторы (Vendor, Product, Revision)
+- Настройки периферии (UART, TIMER)
+- Подключение модулей Modbus
+- Опциональные функции (переключение команд 0x03/0x04)
******************************************************SSSSSS************************/
#ifndef _MODBUS_CONFIG_H_
#define _MODBUS_CONFIG_H_
@@ -26,11 +26,11 @@
-// Общие параметры
-#define MODBUS_DEVICE_ID 3 ///< Адрес устройства в сети Modbus
-#define MODBUS_TIMEOUT 5000 ///< Таймаут в тиках таймера
+// Общие параметры
+#define MODBUS_DEVICE_ID 3 ///< Адрес устройства в сети Modbus
+#define MODBUS_TIMEOUT 5000 ///< Таймаут в тиках таймера
-// Строковые идентификаторы устройства
+// Строковые идентификаторы устройства
#define MODBUS_VENDOR_NAME "super mega vendor"
#define MODBUS_PRODUCT_CODE "Climate control"
#define MODBUS_REVISION "1.0"
@@ -39,36 +39,37 @@
#define MODBUS_MODEL_NAME ""
#define MODBUS_USER_APPLICATION_NAME ""
-#define MODBUS_NUMB_OF_USEROBJECTS 0 ///< Количество пользовательских объектов
-#define MODBUS_USEROBJECT_0_NAME "" ///< Строка пользовательского идентификатора 0. По аналогии можно определить строки до <=128 USEROBJECT
+#define MODBUS_NUMB_OF_USEROBJECTS 0 ///< Количество пользовательских объектов
+#define MODBUS_USEROBJECT_0_NAME "" ///< Строка пользовательского идентификатора 0. По аналогии можно определить строки до <=128 USEROBJECT
-// Периферия (опционально)
+// Периферия (опционально)
#if (USE_USART== USART_1)
-#define mb_huart huart1 ///< Удобный дефайн для модбасовского uart
+#define mb_huart huart1 ///< Удобный дефайн для модбасовского uart
#elif(USE_USART==USART_2)
#define mb_huart huart2
#endif
-#define mb_htim htim2 ///< Удобный дефайн для модбасовского таймера
-//#define RS_EnableReceive() ///< Функция изменения направления передачи на ПРИЕМ для RS-485
-//#define RS_EnableTransmit() ///< Функция изменения направления передачи на ПЕРЕДАЧУ для RS-485
+#define mb_htim htim2 ///< Удобный дефайн для модбасовского таймера
+//#define RS_EnableReceive() ///< Функция изменения направления передачи РЅР° РџР РЕМ для RS-485
+//#define RS_EnableTransmit() ///< Функция изменения направления передачи на ПЕРЕДАЧУ для RS-485
-// Модули modbus
-#define MODBUS_ENABLE_SLAVE ///< Включить обработку СЛЕЙВ режима
-//#define MODBUS_ENABLE_MASTER ///< Включить обработку МАСТЕР режима
+// Модули modbus
+// Enable slave mode
+#define MODBUS_ENABLE_SLAVE ///< Включить обработку СЛЕЙВ режима
+#define MODBUS_ENABLE_MASTER ///< Включить обработку МАСТЕРрежима
-#define MODBUS_ENABLE_COILS ///< Включить обработку коилов
-#define MODBUS_ENABLE_HOLDINGS ///< Включить обработку регистров хранения
-#define MODBUS_ENABLE_INPUTS ///< Включить обработку входных регистров
-#define MODBUS_ENABLE_DEVICE_IDENTIFICATIONS ///< Включить обработку идентификаторы устройства
-#define MODBUS_ENABLE_DIAGNOSTICS ///< Включить обработку диагностики модбас
+#define MODBUS_ENABLE_COILS ///< Включить обработку коилов
+#define MODBUS_ENABLE_HOLDINGS ///< Включить обработку регистров хранения
+#define MODBUS_ENABLE_INPUTS ///< Включить обработку входных регистров
+#define MODBUS_ENABLE_DEVICE_IDENTIFICATIONS ///< Включить обработку идентификаторы устройства
+#define MODBUS_ENABLE_DIAGNOSTICS ///< Включить обработку диагностики модбас
-//#define MODBUS_PROTOCOL_TCP ///< Включить TCP-протокол, иначе - RTU
+//#define MODBUS_PROTOCOL_TCP ///< Включить TCP-протокол, иначе - RTU
/**
- * @brief Поменять комманды 0x03 и 0x04 местами (для LabView терминалки от двигателей)
- * @details Терминалка от двигателей использует для чтения регистров комманду R_HOLD_REGS вместо R_IN_REGS
- * Поэтому чтобы считывать Input Regs - надо поменять их местами.
+ * @brief Поменять комманды 0x03 и 0x04 местами (для LabView терминалки от двигателей)
+ * @details Терминалка от двигателей использует для чтения регистров комманду R_HOLD_REGS вместо R_IN_REGS
+ * Поэтому чтобы считывать Input Regs - надо поменять их местами.
*/
//#define MODBUS_SWITCH_COMMAND_R_IN_REGS_AND_R_HOLD_REGS
@@ -78,3 +79,4 @@
#endif //_MODBUS_CONFIG_H_
+
diff --git a/john103C6T6c русскими коментами.rar b/john103C6T6c русскими коментами.rar
deleted file mode 100644
index e36b5fd..0000000
Binary files a/john103C6T6c русскими коментами.rar and /dev/null differ
diff --git a/schem.pdsprj.DESKTOP-RQ2QP65.z.workspace b/schem.pdsprj.DESKTOP-RQ2QP65.z.workspace
index 7e0cbb7..8d4ca0d 100644
--- a/schem.pdsprj.DESKTOP-RQ2QP65.z.workspace
+++ b/schem.pdsprj.DESKTOP-RQ2QP65.z.workspace
@@ -3,9 +3,9 @@
2c0000000200000003000000ffffffffffffffffffffffffffffffff40000000670000008c080000bd050000
-
+
-
+
@@ -18,9 +18,9 @@
-
+
-
+