Add working rtu example again (currently no dma)
This commit is contained in:
parent
fbe94cf0b7
commit
a1ee35dca3
@ -13,20 +13,6 @@ set(CMAKE_TOOLCHAIN_FILE ${stm32_cmake_SOURCE_DIR}/cmake/stm32_gcc.cmake)
|
|||||||
project(${PROJ_NAME} CXX C ASM)
|
project(${PROJ_NAME} CXX C ASM)
|
||||||
set(CMAKE_INCLUDE_CURRENT_DIR TRUE)
|
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_cmsis(F4)
|
||||||
stm32_fetch_hal(F4)
|
stm32_fetch_hal(F4)
|
||||||
|
|
||||||
@ -81,30 +67,60 @@ endif()
|
|||||||
add_library(nanomodbus ${nanomodbus_SOURCE_DIR}/nanomodbus.c)
|
add_library(nanomodbus ${nanomodbus_SOURCE_DIR}/nanomodbus.c)
|
||||||
target_include_directories(nanomodbus PUBLIC ${nanomodbus_SOURCE_DIR})
|
target_include_directories(nanomodbus PUBLIC ${nanomodbus_SOURCE_DIR})
|
||||||
|
|
||||||
target_link_libraries(
|
set(TARGET_NAMES modbus_rtu modbus_tcp)
|
||||||
${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
|
foreach(TARGET_NAME ${TARGET_NAMES})
|
||||||
COMMAND ${CMAKE_SIZE} $<TARGET_FILE:${TARGET_NAME}>
|
|
||||||
)
|
add_executable(${TARGET_NAME}
|
||||||
add_custom_command(TARGET ${TARGET_NAME} POST_BUILD
|
${TARGET_NAME}.c
|
||||||
COMMAND ${CMAKE_OBJCOPY} -O ihex $<TARGET_FILE:${TARGET_NAME}> ${TARGET_NAME}.hex
|
bsp/blackpill/blackpill.c
|
||||||
)
|
nmbs/port.c
|
||||||
add_custom_command(TARGET ${TARGET_NAME} POST_BUILD
|
)
|
||||||
COMMAND ${CMAKE_OBJCOPY} -O binary $<TARGET_FILE:${TARGET_NAME}> ${TARGET_NAME}.bin
|
|
||||||
)
|
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()
|
||||||
77
examples/stm32/modbus_rtu.c
Normal file
77
examples/stm32/modbus_rtu.c
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -76,7 +76,6 @@ int main(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void blink(void* args)
|
static void blink(void* args)
|
||||||
{
|
{
|
||||||
for(;;)
|
for(;;)
|
||||||
@ -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);
|
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
|
#endif
|
||||||
@ -23,6 +23,7 @@ extern "C" {
|
|||||||
// modbus rtu
|
// modbus rtu
|
||||||
#define MB_UART huart1
|
#define MB_UART huart1
|
||||||
#define RX_BUF_SIZE 256
|
#define RX_BUF_SIZE 256
|
||||||
|
extern UART_HandleTypeDef MB_UART;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef struct tNmbsServer{
|
typedef struct tNmbsServer{
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user