Browse Source

add subboard80

master
zhaohe 1 year ago
parent
commit
684424c075
  1. 11
      usrc/main.cpp
  2. 59
      usrc/public_service/gins.c
  3. 82
      usrc/public_service/gins.h
  4. 33
      usrc/public_service/stm32irq.c
  5. 51
      usrc/subboards/subboard80_cliptip/pri_board.h
  6. 146
      usrc/subboards/subboard80_cliptip/subboard80_cliptip.cpp
  7. 44
      usrc/subboards/subboard80_cliptip/subboard80_cliptip.hpp
  8. 187
      usrc/subboards/subboard80_cliptip/subboard80_cliptip_board.c
  9. 12
      usrc/subboards/subboard80_cliptip/subboard80_cliptip_board.h

11
usrc/main.cpp

@ -13,6 +13,8 @@
#include "subboards/subboard60_inlet_and_outlet_module/subboard60_inlet_and_outlet_module_board.h"
#include "subboards/subboard70_incubation_turntable/subboard70_incubation_turntable.hpp"
#include "subboards/subboard70_incubation_turntable/subboard70_incubation_turntable_board.h"
#include "subboards/subboard80_cliptip/subboard80_cliptip.hpp"
#include "subboards/subboard80_cliptip/subboard80_cliptip_board.h"
//
@ -40,6 +42,11 @@ static void board_init() {
case 70: // 孵化转盘
subboard70_incubation_turntable_board_init();
break;
case 80:
subboard80_cliptip_board_init();
break;
default:
common_hardware_init();
break;
@ -58,6 +65,10 @@ static void board_post_init() {
case 70: // 孵化转盘
Subboard70IncubationTurntable::ins()->initialize();
break;
case 80:
Subboard80Cliptip::ins()->initialize();
break;
default:
break;
}

59
usrc/public_service/gins.c

@ -2,32 +2,43 @@
#include "main.h"
TIM_HandleTypeDef htim6;
TIM_HandleTypeDef htim7;
CAN_HandleTypeDef hcan1;
UART_HandleTypeDef huart1;
UART_HandleTypeDef huart3;
DMA_HandleTypeDef *hdma_usart1_rx;
DMA_HandleTypeDef *hdma_usart3_rx;
DMA_HandleTypeDef *hdma_usart3_tx;
DEFINE_GLOBAL(CAN_HandleTypeDef, hcan1);
DMA_HandleTypeDef hdma1_stream1;
DMA_HandleTypeDef hdma2_stream2;
DMA_HandleTypeDef hdma1_stream3;
DEFINE_GLOBAL(TIM_HandleTypeDef, htim1);
DEFINE_GLOBAL(TIM_HandleTypeDef, htim6);
DEFINE_GLOBAL(TIM_HandleTypeDef, htim7);
extern DMA_HandleTypeDef* hdma_usart3_rx;
extern DMA_HandleTypeDef* hdma_usart3_tx;
DEFINE_GLOBAL(UART_HandleTypeDef, huart1);
DEFINE_GLOBAL(UART_HandleTypeDef, huart2);
DEFINE_GLOBAL(UART_HandleTypeDef, huart3);
DEFINE_GLOBAL(UART_HandleTypeDef, huart4);
SPI_HandleTypeDef hspi1;
DEFINE_GLOBAL(DMA_HandleTypeDef, hdma1_stream1);
DEFINE_GLOBAL(DMA_HandleTypeDef, hdma1_stream2);
DEFINE_GLOBAL(DMA_HandleTypeDef, hdma1_stream3);
DEFINE_GLOBAL(DMA_HandleTypeDef, hdma1_stream5);
DEFINE_GLOBAL(DMA_HandleTypeDef, hdma1_stream6);
DEFINE_GLOBAL(DMA_HandleTypeDef, hdma2_stream1);
DEFINE_GLOBAL(DMA_HandleTypeDef, hdma2_stream2); // used by common board
DEFINE_GLOBAL(DMA_HandleTypeDef, hdma2_stream3);
DEFINE_GLOBAL(DMA_HandleTypeDef, hdma2_stream7);
DEFINE_GLOBAL(DMA_HandleTypeDef, hdma3_stream1);
DEFINE_GLOBAL(DMA_HandleTypeDef, hdma3_stream2);
DEFINE_GLOBAL(DMA_HandleTypeDef, hdma3_stream3);
DEFINE_GLOBAL(DMA_HandleTypeDef, hdma4_stream1);
DEFINE_GLOBAL(DMA_HandleTypeDef, hdma4_stream2);
DEFINE_GLOBAL(DMA_HandleTypeDef, hdma4_stream3);
bool htim6_enable;
bool htim7_enable;
bool htim11_enable = true;
bool hcan1_enable;
bool huart1_enable;
bool huart3_enable;
bool hdma1_stream1_enable;
bool hdma2_stream2_enable;
bool hdma1_stream3_enable;
DEFINE_GLOBAL(SPI_HandleTypeDef, hspi1);
bool hspi1_enable;
/***********************************************************************************************************************
* PTR *
***********************************************************************************************************************/
DEFINE_GLOBAL_PTR(DMA_HandleTypeDef, hdma_usart1_rx);
DEFINE_GLOBAL_PTR(DMA_HandleTypeDef, hdma_usart1_tx);
DEFINE_GLOBAL_PTR(DMA_HandleTypeDef, hdma_usart2_rx);
DEFINE_GLOBAL_PTR(DMA_HandleTypeDef, hdma_usart2_tx);
DEFINE_GLOBAL_PTR(DMA_HandleTypeDef, hdma_usart3_rx);
DEFINE_GLOBAL_PTR(DMA_HandleTypeDef, hdma_usart3_tx);
DEFINE_GLOBAL_PTR(DMA_HandleTypeDef, hdma_usart4_rx);
DEFINE_GLOBAL_PTR(DMA_HandleTypeDef, hdma_usart4_tx);

82
usrc/public_service/gins.h

@ -8,30 +8,64 @@
extern "C" {
#endif
extern TIM_HandleTypeDef htim6;
extern TIM_HandleTypeDef htim7;
extern TIM_HandleTypeDef htim11;
extern CAN_HandleTypeDef hcan1;
extern UART_HandleTypeDef huart1;
extern UART_HandleTypeDef huart3;
extern DMA_HandleTypeDef hdma1_stream1;
extern DMA_HandleTypeDef hdma2_stream2; // used by common board
extern DMA_HandleTypeDef hdma1_stream3;
extern SPI_HandleTypeDef hspi1;
extern DMA_HandleTypeDef* hdma_usart3_rx;
extern DMA_HandleTypeDef* hdma_usart3_tx;
extern bool htim6_enable;
extern bool htim7_enable;
extern bool htim11_enable;
extern bool hcan1_enable;
extern bool huart1_enable;
extern bool huart3_enable;
extern bool hdma1_stream1_enable;
extern bool hdma2_stream2_enable; // used by common board
extern bool hdma1_stream3_enable;
extern bool hspi1_enable;
#define EXTERN_GLOBAL(type, name) \
extern type name; \
extern bool name##_enable;
#define EXTERN_GLOBAL_PTR(type, name) extern type* name;
#define DEFINE_GLOBAL(type, name) \
type name; \
bool name##_enable;
#define DEFINE_GLOBAL_PTR(type, name) type* name;
/***********************************************************************************************************************
* GLOBAL *
***********************************************************************************************************************/
EXTERN_GLOBAL(CAN_HandleTypeDef, hcan1);
EXTERN_GLOBAL(TIM_HandleTypeDef, htim1);
EXTERN_GLOBAL(TIM_HandleTypeDef, htim6);
EXTERN_GLOBAL(TIM_HandleTypeDef, htim7);
EXTERN_GLOBAL(UART_HandleTypeDef, huart1);
EXTERN_GLOBAL(UART_HandleTypeDef, huart2);
EXTERN_GLOBAL(UART_HandleTypeDef, huart3);
EXTERN_GLOBAL(UART_HandleTypeDef, huart4);
EXTERN_GLOBAL(DMA_HandleTypeDef, hdma1_stream1);
EXTERN_GLOBAL(DMA_HandleTypeDef, hdma1_stream2);
EXTERN_GLOBAL(DMA_HandleTypeDef, hdma1_stream3);
EXTERN_GLOBAL(DMA_HandleTypeDef, hdma1_stream5);
EXTERN_GLOBAL(DMA_HandleTypeDef, hdma1_stream6);
EXTERN_GLOBAL(DMA_HandleTypeDef, hdma2_stream1);
EXTERN_GLOBAL(DMA_HandleTypeDef, hdma2_stream2); // used by common board
EXTERN_GLOBAL(DMA_HandleTypeDef, hdma2_stream3);
EXTERN_GLOBAL(DMA_HandleTypeDef, hdma2_stream7);
EXTERN_GLOBAL(DMA_HandleTypeDef, hdma3_stream1);
EXTERN_GLOBAL(DMA_HandleTypeDef, hdma3_stream2);
EXTERN_GLOBAL(DMA_HandleTypeDef, hdma3_stream3);
EXTERN_GLOBAL(DMA_HandleTypeDef, hdma4_stream1);
EXTERN_GLOBAL(DMA_HandleTypeDef, hdma4_stream2);
EXTERN_GLOBAL(DMA_HandleTypeDef, hdma4_stream3);
EXTERN_GLOBAL(SPI_HandleTypeDef, hspi1);
/***********************************************************************************************************************
* PTR *
***********************************************************************************************************************/
EXTERN_GLOBAL_PTR(DMA_HandleTypeDef, hdma_usart1_rx);
EXTERN_GLOBAL_PTR(DMA_HandleTypeDef, hdma_usart1_tx);
EXTERN_GLOBAL_PTR(DMA_HandleTypeDef, hdma_usart2_rx);
EXTERN_GLOBAL_PTR(DMA_HandleTypeDef, hdma_usart2_tx);
EXTERN_GLOBAL_PTR(DMA_HandleTypeDef, hdma_usart3_rx);
EXTERN_GLOBAL_PTR(DMA_HandleTypeDef, hdma_usart3_tx);
EXTERN_GLOBAL_PTR(DMA_HandleTypeDef, hdma_usart4_rx);
EXTERN_GLOBAL_PTR(DMA_HandleTypeDef, hdma_usart4_tx);
#ifdef __cplusplus
}
#endif

33
usrc/public_service/stm32irq.c

@ -42,15 +42,13 @@ void DebugMon_Handler(void) {}
* IRQ *
***********************************************************************************************************************/
void DMA1_Stream1_IRQHandler(void) {
if (hdma1_stream1_enable) HAL_DMA_IRQHandler(&hdma1_stream1);
}
void DMA2_Stream2_IRQHandler(void) {
if (hdma2_stream2_enable) HAL_DMA_IRQHandler(&hdma2_stream2);
}
void DMA1_Stream3_IRQHandler(void) {
if (hdma1_stream3_enable) HAL_DMA_IRQHandler(&hdma1_stream3);
}
void DMA1_Stream1_IRQHandler(void) { HAL_DMA_IRQHandler(&hdma1_stream1); }
void DMA2_Stream2_IRQHandler(void) { HAL_DMA_IRQHandler(&hdma2_stream2); }
void DMA1_Stream3_IRQHandler(void) { HAL_DMA_IRQHandler(&hdma1_stream3); }
void DMA2_Stream7_IRQHandler(void) { HAL_DMA_IRQHandler(&hdma2_stream7); }
void DMA1_Stream5_IRQHandler(void) { HAL_DMA_IRQHandler(&hdma1_stream5); }
void DMA1_Stream6_IRQHandler(void) { HAL_DMA_IRQHandler(&hdma1_stream6); }
void CAN1_TX_IRQHandler(void) {
if (hcan1_enable) HAL_CAN_IRQHandler(&hcan1);
}
@ -64,8 +62,12 @@ void CAN1_SCE_IRQHandler(void) {
if (hcan1_enable) HAL_CAN_IRQHandler(&hcan1);
}
//
extern TIM_HandleTypeDef htim11;
void TIM1_TRG_COM_TIM11_IRQHandler(void) {
if (htim11_enable) HAL_TIM_IRQHandler(&htim11);
HAL_TIM_IRQHandler(&htim11);
if (htim1_enable) HAL_TIM_IRQHandler(&htim1);
}
void TIM6_DAC_IRQHandler(void) {
@ -75,12 +77,11 @@ void TIM7_IRQHandler(void) {
if (htim7_enable) HAL_TIM_IRQHandler(&htim7);
}
//
void USART1_IRQHandler(void) {
if (huart1_enable) HAL_UART_IRQHandler(&huart1);
}
void USART3_IRQHandler(void) {
if (huart3_enable) HAL_UART_IRQHandler(&huart3);
}
void USART1_IRQHandler(void) { HAL_UART_IRQHandler(&huart1); }
void USART2_IRQHandler(void) { HAL_UART_IRQHandler(&huart2); }
void USART3_IRQHandler(void) { HAL_UART_IRQHandler(&huart3); }
void UART4_IRQHandler(void) { HAL_UART_IRQHandler(&huart4); }
/***********************************************************************************************************************
* EXT *
***********************************************************************************************************************/

51
usrc/subboards/subboard80_cliptip/pri_board.h

@ -0,0 +1,51 @@
#pragma once
/***********************************************************************************************************************
* IO *
***********************************************************************************************************************/
#define EXT_INPUT_IO0 PinNull
#define EXT_INPUT_IO1 PinNull
#define EXT_INPUT_IO2 PinNull
#define EXT_INPUT_IO3 PinNull
#define EXT_INPUT_IO4 PinNull
#define EXT_INPUT_IO0_MIRROR true
#define EXT_INPUT_IO1_MIRROR true
#define EXT_INPUT_IO2_MIRROR true
#define EXT_INPUT_IO3_MIRROR true
#define EXT_INPUT_IO4_MIRROR true
/***********************************************************************************************************************
* *
***********************************************************************************************************************/
#define TMC_MOTOR_SPI hspi1
#define MOTOR1_CSN PA4
#define MOTOR1_ENN PE3
#define MOTOR1_SPI_MODE_SELECT PinNull
#define MOTOR1_nFREEZE_IO PE12
#define MOTOR1_nRESET_IO PinNull
#define MOTOR1_SUB_IC_ENN_IO PE11
#define MOTOR1_REFL PD2
#define MOTOR1_REFR PD1
#define MOTOR1_REFL_MIRROR true
#define MOTOR1_REFR_MIRROR true
#define MOTOR1_MOTOR_SHAFT false //
#define MOTOR1_MOTOR_ONE_CIRCLE_PULSE 80 // 3600 = 93圈, 3600/93 = 38.70967741935484
#define MOTOR1_MOTOR_ONE_CIRCLE_PULSE_DENOMINATOR 1 //
#define MOTOR1_STEPMOTOR_IHOLD 1
#define MOTOR1_STEPMOTOR_IRUN 8
#define MOTOR1_STEPMOTOR_IHOLDDELAY 100
#define MOTOR1_STEPMOTOR_IGLOBALSCALER 1
#define MOTOR1_MOTOR_DEFAULT_ACC 300
#define MOTOR1_MOTOR_DEFAULT_DEC 300
#define MOTOR1_MOTOR_DEFAULT_VELOCITY 500
#define MOTOR1_MIN_D 0
#define MOTOR1_MAX_D 0
#define MOTOR1_MOTOR_RUN_TO_ZERO_SPEED 100
#define MOTOR1_MOTOR_RUN_TO_ZERO_DEC 300
#define MOTOR1_MOTOR_LOOK_ZERO_EDGE_SPEED 50
#define MOTOR1_MOTOR_LOOK_ZERO_EDGE_DEC 600

146
usrc/subboards/subboard80_cliptip/subboard80_cliptip.cpp

@ -0,0 +1,146 @@
#include "subboard80_cliptip.hpp"
extern "C" {
#include "subboard80_cliptip_board.h"
}
#include "pri_board.h"
#include "public_service/public_service.hpp"
#include "sdk/components/mini_servo_motor/feite_servo_motor.hpp"
#include "sdk/components/mini_servo_motor/mini_servo_motor_ctrl_module.hpp"
#include "sdk/components/sensors/m3078/m3078_code_scaner.hpp"
#include "sdk/components/step_motor_ctrl_module/step_motor_ctrl_module.hpp"
#include "sdk/components/tmc/ic/ztmc4361A.hpp"
#include "sdk\components\pipette_module\pipette_ctrl_module_v2.hpp"
#define TAG "ShakeModule"
using namespace iflytop;
static ZGPIO IO[5];
Subboard80Cliptip::Subboard80Cliptip(/* args */) {}
Subboard80Cliptip::~Subboard80Cliptip() {}
int32_t Subboard80Cliptip::getmoduleId(int off) { return zdevice_id_mgr_get_device_id() + off; }
Subboard80Cliptip *Subboard80Cliptip::ins() {
static Subboard80Cliptip instance;
return &instance;
}
/***********************************************************************************************************************
* PRI *
***********************************************************************************************************************/
int32_t Subboard80Cliptip::getid(int32_t *id) {
*id = getmoduleId(0);
return 0;
}
int32_t Subboard80Cliptip::module_xxx_reg(int32_t param_id, bool read, int32_t &val) { return err::kmodule_not_find_reg; }
int32_t Subboard80Cliptip::board_read_ext_io(int32_t ioindex, int32_t *val) {
if (ioindex < 0 || ioindex >= ZARRAY_SIZE(IO)) {
return err::kparam_out_of_range;
}
*val = IO[ioindex].getState();
return 0;
}
int32_t Subboard80Cliptip::board_write_ext_io(int32_t ioindex, int32_t val) { return 0; }
int32_t Subboard80Cliptip::board_read_muti_io(int32_t *val) {
for (int i = 0; i < ZARRAY_SIZE(IO); i++) {
*val |= IO[i].getState() << i;
}
return 0;
}
/***********************************************************************************************************************
* IMPL *
***********************************************************************************************************************/
void Subboard80Cliptip::initialize() {
IO[0].initAsInput(EXT_INPUT_IO0, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, EXT_INPUT_IO0_MIRROR);
IO[1].initAsInput(EXT_INPUT_IO1, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, EXT_INPUT_IO1_MIRROR);
IO[2].initAsInput(EXT_INPUT_IO2, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, EXT_INPUT_IO2_MIRROR);
IO[3].initAsInput(EXT_INPUT_IO3, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, EXT_INPUT_IO3_MIRROR);
IO[4].initAsInput(EXT_INPUT_IO4, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, EXT_INPUT_IO4_MIRROR);
GService::inst()->getZCanProtocolParser()->registerModule(this);
#if 1
/***********************************************************************************************************************
* ID1 *
***********************************************************************************************************************/
{
static TMC5130 motor;
static StepMotorCtrlModule module;
int subid = 1;
TMC5130::cfg_t tmc5130cfg = {
.spi = &TMC_MOTOR_SPI, //
.csgpio = MOTOR1_CSN, //
.ennPin = MOTOR1_ENN, //
.spi_mode_select = MOTOR1_SPI_MODE_SELECT, //
};
motor.initialize(&tmc5130cfg);
motor.setMotorShaft(false);
static ZGPIO input[2];
input[0].initAsInput(MOTOR1_REFL /*REFL*/, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, MOTOR1_REFL_MIRROR);
input[1].initAsInput(MOTOR1_REFR /*REFR*/, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, MOTOR1_REFR_MIRROR);
StepMotorCtrlModule::config_t stepcfg = {0};
StepMotorCtrlModule::create_default_cfg(stepcfg);
stepcfg.motor_shaft = MOTOR1_MOTOR_SHAFT;
stepcfg.motor_one_circle_pulse = MOTOR1_MOTOR_ONE_CIRCLE_PULSE;
stepcfg.motor_one_circle_pulse_denominator = MOTOR1_MOTOR_ONE_CIRCLE_PULSE_DENOMINATOR;
stepcfg.stepmotor_ihold = MOTOR1_STEPMOTOR_IHOLD;
stepcfg.stepmotor_irun = MOTOR1_STEPMOTOR_IRUN;
stepcfg.stepmotor_iholddelay = MOTOR1_STEPMOTOR_IHOLDDELAY;
stepcfg.stepmotor_iglobalscaler = MOTOR1_STEPMOTOR_IGLOBALSCALER;
stepcfg.motor_default_acc = MOTOR1_MOTOR_DEFAULT_ACC;
stepcfg.motor_default_dec = MOTOR1_MOTOR_DEFAULT_DEC;
stepcfg.motor_default_velocity = MOTOR1_MOTOR_DEFAULT_VELOCITY;
stepcfg.min_d = MOTOR1_MIN_D;
stepcfg.max_d = MOTOR1_MAX_D;
stepcfg.motor_run_to_zero_speed = MOTOR1_MOTOR_RUN_TO_ZERO_SPEED;
stepcfg.motor_run_to_zero_dec = MOTOR1_MOTOR_RUN_TO_ZERO_DEC;
stepcfg.motor_look_zero_edge_speed = MOTOR1_MOTOR_LOOK_ZERO_EDGE_SPEED;
stepcfg.motor_look_zero_edge_dec = MOTOR1_MOTOR_LOOK_ZERO_EDGE_DEC;
module.initialize(getmoduleId(subid), &motor, input, ZARRAY_SIZE(input), &stepcfg);
GService::inst()->getZCanProtocolParser()->registerModule(&module);
ZLOGI(TAG, "motor%d readic version %x", subid, motor.readICVersion());
}
{
static PipetteModule module;
int subid = 2;
PipetteModule::config_t cfg = {
.limit_ul = 30,
};
PipetteModule::hardward_config_t hardwarecfg = {
.uart = &huart2,
.hdma_rx = hdma_usart2_rx,
.hdma_tx = hdma_usart2_tx,
};
module.initialize(getmoduleId(subid), &cfg, &hardwarecfg);
GService::inst()->getZCanProtocolParser()->registerModule(&module);
}
{
static M3078CodeScanner codescanner;
int subid = 3;
static M3078CodeScanner::hardware_config_t cfg = {
.uart = &huart4,
.hdma_rx = nullptr,
.hdma_tx = nullptr,
.codeReadOkPin = PinNull,
.rstPin = PinNull,
.triggerPin = PD15,
};
codescanner.initialize(getmoduleId(subid), &cfg);
GService::inst()->getZCanProtocolParser()->registerModule(&codescanner);
}
#endif
}

44
usrc/subboards/subboard80_cliptip/subboard80_cliptip.hpp

@ -0,0 +1,44 @@
#include <stddef.h>
#include <stdio.h>
//
#include "configs/device_id_mgr.hpp"
#include "sdk/chip/chip.hpp"
#include "sdk/os/zos.hpp"
//
#include "sdk\components\step_motor_ctrl_module\step_motor_ctrl_module.hpp"
#include "sdk\components\tmc\ic\ztmc5130.hpp"
namespace iflytop {
class Subboard80Cliptip : public ZIBoard, public ZIModule {
ENABLE_MODULE(Subboard80Cliptip, kboard, 1);
private:
/* data */
public:
Subboard80Cliptip(/* args */);
~Subboard80Cliptip();
static Subboard80Cliptip *ins();
void initialize();
public:
/***********************************************************************************************************************
* ZIModule *
***********************************************************************************************************************/
virtual int32_t getid(int32_t *id);
virtual int32_t module_xxx_reg(int32_t param_id, bool read, int32_t &val);
/***********************************************************************************************************************
* ZIBoard *
***********************************************************************************************************************/
virtual int32_t board_read_ext_io(int32_t ioindex, int32_t *val);
virtual int32_t board_write_ext_io(int32_t ioindex, int32_t val);
virtual int32_t board_read_muti_io(int32_t *val);
private:
int32_t getmoduleId(int off);
};
} // namespace iflytop

187
usrc/subboards/subboard80_cliptip/subboard80_cliptip_board.c

@ -0,0 +1,187 @@
#include "main.h"
#include "public_service/public_service.h"
/* SPI1 init function */
static void MX_SPI1_Init(void) {
__HAL_RCC_SPI1_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
hspi1.Instance = SPI1;
hspi1.Init.Mode = SPI_MODE_MASTER;
hspi1.Init.Direction = SPI_DIRECTION_2LINES;
hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
hspi1.Init.NSS = SPI_NSS_SOFT;
hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32;
hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
hspi1.Init.CRCPolynomial = 10;
if (HAL_SPI_Init(&hspi1) != HAL_OK) {
Error_Handler();
}
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
hspi1_enable = true;
}
/**
* @brief
*/
static void UART2_Init() {
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_USART2_CLK_ENABLE();
__HAL_RCC_GPIOD_CLK_ENABLE();
__HAL_RCC_DMA1_CLK_ENABLE();
/***********************************************************************************************************************
* INIT_UART *
***********************************************************************************************************************/
huart2.Instance = USART2;
huart2.Init.BaudRate = 38400;
huart2.Init.WordLength = UART_WORDLENGTH_8B;
huart2.Init.StopBits = UART_STOPBITS_1;
huart2.Init.Parity = UART_PARITY_NONE;
huart2.Init.Mode = UART_MODE_TX_RX;
huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart2.Init.OverSampling = UART_OVERSAMPLING_16;
if (HAL_UART_Init(&huart3) != HAL_OK) {
Error_Handler();
}
/***********************************************************************************************************************
* INIT_GPIO *
***********************************************************************************************************************/
GPIO_InitStruct.Pin = GPIO_PIN_5 | GPIO_PIN_6;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF7_USART2;
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
/***********************************************************************************************************************
* INIT DMA *
***********************************************************************************************************************/
/* USART2 DMA Init */
/* USART2_RX Init */
hdma1_stream5.Instance = DMA1_Stream5;
hdma1_stream5.Init.Channel = DMA_CHANNEL_4;
hdma1_stream5.Init.Direction = DMA_PERIPH_TO_MEMORY;
hdma1_stream5.Init.PeriphInc = DMA_PINC_DISABLE;
hdma1_stream5.Init.MemInc = DMA_MINC_ENABLE;
hdma1_stream5.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
hdma1_stream5.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
hdma1_stream5.Init.Mode = DMA_NORMAL;
hdma1_stream5.Init.Priority = DMA_PRIORITY_LOW;
hdma1_stream5.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
if (HAL_DMA_Init(&hdma1_stream5) != HAL_OK) {
Error_Handler();
}
__HAL_LINKDMA(&huart2, hdmarx, hdma1_stream5);
/* USART2_TX Init */
hdma1_stream6.Instance = DMA1_Stream6;
hdma1_stream6.Init.Channel = DMA_CHANNEL_4;
hdma1_stream6.Init.Direction = DMA_MEMORY_TO_PERIPH;
hdma1_stream6.Init.PeriphInc = DMA_PINC_DISABLE;
hdma1_stream6.Init.MemInc = DMA_MINC_ENABLE;
hdma1_stream6.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
hdma1_stream6.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
hdma1_stream6.Init.Mode = DMA_NORMAL;
hdma1_stream6.Init.Priority = DMA_PRIORITY_LOW;
hdma1_stream6.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
if (HAL_DMA_Init(&hdma1_stream6) != HAL_OK) {
Error_Handler();
}
__HAL_LINKDMA(&huart2, hdmatx, hdma1_stream6);
/***********************************************************************************************************************
* INIT_IRQ *
***********************************************************************************************************************/
HAL_NVIC_SetPriority(DMA1_Stream1_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(DMA1_Stream1_IRQn);
HAL_NVIC_SetPriority(DMA1_Stream3_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(DMA1_Stream3_IRQn);
HAL_NVIC_SetPriority(USART2_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(USART2_IRQn);
/***********************************************************************************************************************
* LINK *
***********************************************************************************************************************/
hdma_usart2_rx = &hdma1_stream5;
hdma_usart2_tx = &hdma1_stream6;
hdma1_stream5_enable = true;
hdma1_stream6_enable = true;
huart2_enable = true;
}
/**
* @brief
*/
static void UART4_Init() {
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_UART4_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOC_CLK_ENABLE();
huart4.Instance = UART4;
huart4.Init.BaudRate = 115200;
huart4.Init.WordLength = UART_WORDLENGTH_8B;
huart4.Init.StopBits = UART_STOPBITS_1;
huart4.Init.Parity = UART_PARITY_NONE;
huart4.Init.Mode = UART_MODE_TX_RX;
huart4.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart4.Init.OverSampling = UART_OVERSAMPLING_16;
if (HAL_UART_Init(&huart4) != HAL_OK) {
Error_Handler();
}
/**UART4 GPIO Configuration
PA0-WKUP ------> UART4_TX
PC11 ------> UART4_RX
*/
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF8_UART4;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_11;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF8_UART4;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
/* UART4 interrupt Init */
HAL_NVIC_SetPriority(UART4_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(UART4_IRQn);
huart4_enable = true;
}
/**
* @brief
*/
void subboard80_cliptip_board_init() {
common_hardware_init();
MX_SPI1_Init();
UART2_Init(); //
UART4_Init();
}

12
usrc/subboards/subboard80_cliptip/subboard80_cliptip_board.h

@ -0,0 +1,12 @@
#pragma once
#include "main.h"
#ifdef __cplusplus
extern "C" {
#endif
void subboard80_cliptip_board_init();
#ifdef __cplusplus
}
#endif
Loading…
Cancel
Save