9 changed files with 561 additions and 64 deletions
-
11usrc/main.cpp
-
59usrc/public_service/gins.c
-
82usrc/public_service/gins.h
-
33usrc/public_service/stm32irq.c
-
51usrc/subboards/subboard80_cliptip/pri_board.h
-
146usrc/subboards/subboard80_cliptip/subboard80_cliptip.cpp
-
44usrc/subboards/subboard80_cliptip/subboard80_cliptip.hpp
-
187usrc/subboards/subboard80_cliptip/subboard80_cliptip_board.c
-
12usrc/subboards/subboard80_cliptip/subboard80_cliptip_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 |
@ -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
|
||||
|
} |
@ -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
|
@ -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(); |
||||
|
} |
@ -0,0 +1,12 @@ |
|||||
|
#pragma once |
||||
|
#include "main.h" |
||||
|
|
||||
|
#ifdef __cplusplus |
||||
|
extern "C" { |
||||
|
#endif |
||||
|
|
||||
|
void subboard80_cliptip_board_init(); |
||||
|
|
||||
|
#ifdef __cplusplus |
||||
|
} |
||||
|
#endif |
Write
Preview
Loading…
Cancel
Save
Reference in new issue