Add working rtu example again (currently no dma)

This commit is contained in:
donghoonpark 2024-11-10 17:12:57 +09:00 committed by Valerio De Benedetto
parent fbe94cf0b7
commit a1ee35dca3
5 changed files with 161 additions and 41 deletions

View File

@ -13,20 +13,6 @@ set(CMAKE_TOOLCHAIN_FILE ${stm32_cmake_SOURCE_DIR}/cmake/stm32_gcc.cmake)
project(${PROJ_NAME} CXX C ASM)
set(CMAKE_INCLUDE_CURRENT_DIR TRUE)
set(TARGET_NAME ${PROJ_NAME})
add_executable(${TARGET_NAME}
main.c
bsp/blackpill/blackpill.c
nmbs/port.c
)
target_include_directories(
${TARGET_NAME} PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/bsp
${CMAKE_CURRENT_SOURCE_DIR}/nmbs
)
stm32_fetch_cmsis(F4)
stm32_fetch_hal(F4)
@ -81,30 +67,60 @@ endif()
add_library(nanomodbus ${nanomodbus_SOURCE_DIR}/nanomodbus.c)
target_include_directories(nanomodbus PUBLIC ${nanomodbus_SOURCE_DIR})
target_link_libraries(
${TARGET_NAME}
STM32::NoSys
CMSIS::STM32::F401CC
HAL::STM32::F4::CORTEX
HAL::STM32::F4::RCC
HAL::STM32::F4::PWR
HAL::STM32::F4::GPIO
HAL::STM32::F4::TIM
HAL::STM32::F4::UART
HAL::STM32::F4::USART
HAL::STM32::F4::SPI
HAL::STM32::F4::DMA
wizchip
freertos_kernel
nanomodbus
)
set(TARGET_NAMES modbus_rtu modbus_tcp)
add_custom_command(TARGET ${TARGET_NAME} POST_BUILD
COMMAND ${CMAKE_SIZE} $<TARGET_FILE:${TARGET_NAME}>
)
add_custom_command(TARGET ${TARGET_NAME} POST_BUILD
COMMAND ${CMAKE_OBJCOPY} -O ihex $<TARGET_FILE:${TARGET_NAME}> ${TARGET_NAME}.hex
)
add_custom_command(TARGET ${TARGET_NAME} POST_BUILD
COMMAND ${CMAKE_OBJCOPY} -O binary $<TARGET_FILE:${TARGET_NAME}> ${TARGET_NAME}.bin
)
foreach(TARGET_NAME ${TARGET_NAMES})
add_executable(${TARGET_NAME}
${TARGET_NAME}.c
bsp/blackpill/blackpill.c
nmbs/port.c
)
target_include_directories(
${TARGET_NAME} PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/bsp
${CMAKE_CURRENT_SOURCE_DIR}/nmbs
)
if(${TARGET_NAME} STREQUAL "modbus_rtu")
target_compile_definitions(
${TARGET_NAME} PRIVATE
NMBS_RTU
)
elseif(${TARGET_NAME} STREQUAL "modbus_tcp")
target_compile_definitions(
${TARGET_NAME} PRIVATE
NMBS_TCP
)
endif()
target_link_libraries(
${TARGET_NAME}
STM32::NoSys
CMSIS::STM32::F401CC
HAL::STM32::F4::CORTEX
HAL::STM32::F4::RCC
HAL::STM32::F4::PWR
HAL::STM32::F4::GPIO
HAL::STM32::F4::TIM
HAL::STM32::F4::UART
HAL::STM32::F4::USART
HAL::STM32::F4::SPI
HAL::STM32::F4::DMA
wizchip
freertos_kernel
nanomodbus
)
add_custom_command(TARGET ${TARGET_NAME} POST_BUILD
COMMAND ${CMAKE_SIZE} $<TARGET_FILE:${TARGET_NAME}>
)
add_custom_command(TARGET ${TARGET_NAME} POST_BUILD
COMMAND ${CMAKE_OBJCOPY} -O ihex $<TARGET_FILE:${TARGET_NAME}> ${TARGET_NAME}.hex
)
add_custom_command(TARGET ${TARGET_NAME} POST_BUILD
COMMAND ${CMAKE_OBJCOPY} -O binary $<TARGET_FILE:${TARGET_NAME}> ${TARGET_NAME}.bin
)
endforeach()

View File

@ -0,0 +1,77 @@
#include "blackpill/blackpill.h"
#include "nanomodbus.h"
#include "nmbs/port.h"
#include "FreeRTOS.h"
#include "task.h"
#define TEST_SERVER 1
#define TEST_CLIENT 0
static void blink(void* args);
static void modbus(void* args);
uint32_t HAL_GetTick(void)
{
return xTaskGetTickCount();
}
int main(void)
{
BSP_Init();
xTaskCreate(blink, "blink", 128, NULL, 4, NULL);
xTaskCreate(modbus, "modbus", 128 * 16, NULL, 2, NULL);
vTaskStartScheduler();
for(;;){}
}
static void blink(void* args)
{
for(;;)
{
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);
vTaskDelay(500);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);
vTaskDelay(500);
}
}
nmbs_t nmbs;
nmbs_server_t nmbs_server =
{
.id = 0x01,
.coils = {0,},
.regs = {0,},
};
static void modbus(void* args)
{
#if TEST_SERVER
nmbs_server_init(&nmbs, &nmbs_server);
#endif
#if TEST_CLIENT
uint8_t coils_test[32];
uint16_t regs_test[32];
nmbs_client_init(&nmbs);
#endif
for(;;){
#if TEST_SERVER
nmbs_server_poll(&nmbs);
taskYIELD();
#endif
#if TEST_CLIENT
nmbs_set_destination_rtu_address(&nmbs, 0x01);
nmbs_error status = nmbs_read_holding_registers(&nmbs, 0, 32, regs_test);
status = nmbs_write_multiple_registers(&nmbs, 0, 32, regs_test);
if(status != NMBS_ERROR_NONE)
{
while(true){}
}
#endif
}
}

View File

@ -76,7 +76,6 @@ int main(void)
}
}
static void blink(void* args)
{
for(;;)

View File

@ -197,4 +197,31 @@ int32_t write_socket(const uint8_t *buf, uint16_t count, int32_t byte_timeout_ms
{
return send(MB_SOCKET, buf, count);
}
#endif
#ifdef NMBS_RTU
static int32_t read_serial(uint8_t* buf, uint16_t count, int32_t byte_timeout_ms, void* arg)
{
HAL_StatusTypeDef status = HAL_UART_Receive(&MB_UART, buf, count, byte_timeout_ms);
if(status == HAL_OK)
{
return count;
}
else
{
return 0;
}
}
static int32_t write_serial(const uint8_t* buf, uint16_t count, int32_t byte_timeout_ms, void* arg)
{
HAL_StatusTypeDef status = HAL_UART_Transmit(&MB_UART, buf, count, byte_timeout_ms);
if(status == HAL_OK)
{
return count;
}
else
{
return 0;
}
}
#endif

View File

@ -23,6 +23,7 @@ extern "C" {
// modbus rtu
#define MB_UART huart1
#define RX_BUF_SIZE 256
extern UART_HandleTypeDef MB_UART;
#endif
typedef struct tNmbsServer{