настройка 2 uart одни на слейв другой на мастер
This commit is contained in:
@@ -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);
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
// пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ
|
||||
// пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅ (пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅ)
|
||||
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; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
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++)
|
||||
{
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> ROM-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅ 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 */
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user