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)
|
||||
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()
|
||||
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)
|
||||
{
|
||||
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);
|
||||
}
|
||||
#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
|
||||
@ -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{
|
||||
|
||||
Loading…
Reference in New Issue
Block a user