diff --git a/Makefile b/Makefile index 5933af0bc649d05ee2b5115417a501e47bffdca5..f11eaa6ddb8dc3aa603a028d857a2a25a9e1168b 100755 --- a/Makefile +++ b/Makefile @@ -8,6 +8,7 @@ TARGET_FILES+=src/system_stm32f4xx.c TARGET_FILES+=src/stm32f4xx_hal_msp.c TARGET_FILES+=src/gpio.c TARGET_FILES+=src/bioloid_time.c +TARGET_FILES+=src/bioloid_dyn_slave.c TARGET_PROCESSOR=STM32F407VG HAL_PATH=../../STM32_processor/hal/f4 @@ -65,6 +66,9 @@ TARGET_FILES+=$(HAL_PATH)/src/stm32f4xx_hal_flash.c TARGET_FILES+=$(HAL_PATH)/src/stm32f4xx_hal_flash_ex.c TARGET_FILES+=$(HAL_PATH)/src/stm32f4xx_hal_dma.c TARGET_FILES+=$(HAL_PATH)/src/stm32f4xx_hal.c +TARGET_FILES+=$(HAL_PATH)/src/stm32f4xx_hal_uart.c + +TARGET_FILES+=$(USART_PATH)/src/usart3.c BIOLOID_OBJS_TMP = $(notdir $(TARGET_FILES:.c=.o)) BIOLOID_OBJS = $(patsubst %,$(BUILD_PATH)/%,$(BIOLOID_OBJS_TMP)) diff --git a/include/bioloid_dyn_slave.h b/include/bioloid_dyn_slave.h new file mode 100644 index 0000000000000000000000000000000000000000..2298418bf77f015680f896614020e0c74e5eaa04 --- /dev/null +++ b/include/bioloid_dyn_slave.h @@ -0,0 +1,22 @@ +#ifndef _BIOLOID_DYN_SLAVE_H +#define _BIOLOID_DYN_SLAVE_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "stm32f4xx_hal.h" +#include "stm32_time.h" +#include "dynamixel_slave.h" +#include "comm.h" + +extern TDynamixelSlave bioloid_dyn_slave; + +void bioloid_dyn_slave_init(void); + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/src/bioloid_dyn_slave.c b/src/bioloid_dyn_slave.c new file mode 100644 index 0000000000000000000000000000000000000000..28eceee2a0077d80d2aff8ab3758dc65f183db0c --- /dev/null +++ b/src/bioloid_dyn_slave.c @@ -0,0 +1,54 @@ +#include "bioloid_dyn_slave.h" +#include "bioloid_time.h" +#include "usart3.h" + +/* private variables */ +TDynamixelSlave bioloid_dyn_slave; +TTime bioloid_dyn_slave_timer; +TComm bioloid_dyn_slave_comm; + +// private functions +unsigned char bioloid_on_read(unsigned short int address,unsigned short int length,unsigned char *data) +{ + return 0x00; +} + +unsigned char bioloid_on_write(unsigned short int address,unsigned short int length,unsigned char *data) +{ + return 0x00; +} + +// public functions +void bioloid_dyn_slave_init(void) +{ + TUSART_IRQ_Priorities priorities; + UART_InitTypeDef Init; + + // initialize timer structure + time_init(&bioloid_dyn_slave_timer,bioloid_time_get_counts_per_us(),bioloid_time_get_counts); + + /* initialize the comm object */ + comm_init(&bioloid_dyn_slave_comm,0x01,&bioloid_dyn_slave_timer); + Init.BaudRate = 921600; + Init.WordLength = UART_WORDLENGTH_8B; + Init.StopBits = UART_STOPBITS_1; + Init.Parity = UART_PARITY_NONE; + Init.Mode = UART_MODE_TX_RX; + Init.HwFlowCtl = UART_HWCONTROL_NONE; + Init.OverSampling = UART_OVERSAMPLING_16; + + priorities.irq_priority=0; + priorities.irq_subpriority=0; + priorities.dma_rx_priority=1; + priorities.dma_rx_subpriority=1; + priorities.dma_tx_priority=1; + priorities.dma_tx_subpriority=0; + + usart3_init(&bioloid_dyn_slave_comm,&Init,&priorities); + dyn_slave_init(&bioloid_dyn_slave,&bioloid_dyn_slave_comm,0x01); + bioloid_dyn_slave.on_read=bioloid_on_read; + bioloid_dyn_slave.on_write=bioloid_on_write; + //dyn_slave_set_return_delay(&battery_dyn_slave,ram_data[BATTERY_RETURN_DELAY_TIME]); + //dyn_slave_set_return_level(&battery_dyn_slave,ram_data[BATTERY_STATUS_RETURN_LEVEL]); +} + diff --git a/src/bioloid_stm32.c b/src/bioloid_stm32.c index 471649eef3dd21ee4388e7a7fd360b72f13be2fb..927065e7f2e113b64a3c856cd606c2bd40be7f9f 100644 --- a/src/bioloid_stm32.c +++ b/src/bioloid_stm32.c @@ -1,26 +1,22 @@ #include "stm32f4xx_hal.h" +#include "bioloid_dyn_slave.h" #include "gpio.h" #include "bioloid_time.h" #include "stm32_time.h" int32_t main(void) { - TTime timer; - int i; - HAL_Init(); /* initialize the gpio */ gpio_init(); /* initialize the time module */ bioloid_time_init(); - - time_init(&timer, bioloid_time_get_counts_per_us(), bioloid_time_get_counts); + /* initialize the dynamixel slave interface */ + bioloid_dyn_slave_init(); while(1) { - for(i=0;i<10000;i++) - time_delay_us(&timer,100); - gpio_toggle_led(USER1_LED); + dyn_slave_loop(&bioloid_dyn_slave); } }