备份,两路并口转16路串口代码编写完成

This commit is contained in:
王绪洁 2025-03-19 16:46:20 +08:00
parent 4f07311ac3
commit 89b05b1b74
13 changed files with 5047 additions and 4321 deletions

View File

@ -58,23 +58,83 @@ void Error_Handler(void);
/* USER CODE END EFP */ /* USER CODE END EFP */
/* Private defines -----------------------------------------------------------*/ /* Private defines -----------------------------------------------------------*/
#define DAC7_CS_Pin GPIO_PIN_2
#define DAC7_CS_GPIO_Port GPIOE
#define DAC8_CS_Pin GPIO_PIN_3
#define DAC8_CS_GPIO_Port GPIOE
#define DAC9_CS_Pin GPIO_PIN_4
#define DAC9_CS_GPIO_Port GPIOE
#define PE5_LED_Pin GPIO_PIN_5 #define PE5_LED_Pin GPIO_PIN_5
#define PE5_LED_GPIO_Port GPIOE #define PE5_LED_GPIO_Port GPIOE
#define HART11_RTS_Pin GPIO_PIN_6
#define HART11_RTS_GPIO_Port GPIOF
#define HART10_RTS_Pin GPIO_PIN_8
#define HART10_RTS_GPIO_Port GPIOF
#define HART_CLK_Pin GPIO_PIN_3 #define HART_CLK_Pin GPIO_PIN_3
#define HART_CLK_GPIO_Port GPIOA #define HART_CLK_GPIO_Port GPIOA
#define HART_ALL_RST_Pin GPIO_PIN_4 #define HART_ALL_RST_Pin GPIO_PIN_4
#define HART_ALL_RST_GPIO_Port GPIOA #define HART_ALL_RST_GPIO_Port GPIOA
#define CH438_1_AMOD_Pin GPIO_PIN_14 #define HART9_RTS_Pin GPIO_PIN_0
#define CH438_1_AMOD_GPIO_Port GPIOF #define HART9_RTS_GPIO_Port GPIOB
#define CH438_AMOD_Pin GPIO_PIN_14
#define CH438_AMOD_GPIO_Port GPIOF
#define HART8_RTS_Pin GPIO_PIN_0
#define HART8_RTS_GPIO_Port GPIOG
#define HART7_RTS_Pin GPIO_PIN_11
#define HART7_RTS_GPIO_Port GPIOE
#define HART6_RTS_Pin GPIO_PIN_13
#define HART6_RTS_GPIO_Port GPIOE
#define HART5_RTS_Pin GPIO_PIN_8
#define HART5_RTS_GPIO_Port GPIOD
#define HART4_RTS_Pin GPIO_PIN_10
#define HART4_RTS_GPIO_Port GPIOD
#define HART3_RTS_Pin GPIO_PIN_12
#define HART3_RTS_GPIO_Port GPIOD
#define HART2_RTS_Pin GPIO_PIN_2
#define HART2_RTS_GPIO_Port GPIOG
#define HART1_RTS_Pin GPIO_PIN_4 #define HART1_RTS_Pin GPIO_PIN_4
#define HART1_RTS_GPIO_Port GPIOG #define HART1_RTS_GPIO_Port GPIOG
#define HART16_RTS_Pin GPIO_PIN_6
#define HART16_RTS_GPIO_Port GPIOG
#define HART15_RTS_Pin GPIO_PIN_9
#define HART15_RTS_GPIO_Port GPIOA
#define HART14_RTS_Pin GPIO_PIN_11
#define HART14_RTS_GPIO_Port GPIOA
#define HART12_RTS_Pin GPIO_PIN_15
#define HART12_RTS_GPIO_Port GPIOA
#define HART13_RTS_Pin GPIO_PIN_11
#define HART13_RTS_GPIO_Port GPIOC
#define CH438_INT_Pin GPIO_PIN_2 #define CH438_INT_Pin GPIO_PIN_2
#define CH438_INT_GPIO_Port GPIOD #define CH438_INT_GPIO_Port GPIOD
#define CH438_INT_EXTI_IRQn EXTI2_IRQn #define CH438_INT_EXTI_IRQn EXTI2_IRQn
#define CH438_1_RST_Pin GPIO_PIN_3 #define CH438_RST_Pin GPIO_PIN_3
#define CH438_1_RST_GPIO_Port GPIOD #define CH438_RST_GPIO_Port GPIOD
#define DAC10_CS_Pin GPIO_PIN_6
#define DAC10_CS_GPIO_Port GPIOD
#define DAC11_CS_Pin GPIO_PIN_10
#define DAC11_CS_GPIO_Port GPIOG
#define DAC12_CS_Pin GPIO_PIN_11
#define DAC12_CS_GPIO_Port GPIOG
#define DAC13_CS_Pin GPIO_PIN_12
#define DAC13_CS_GPIO_Port GPIOG
#define DAC14_CS_Pin GPIO_PIN_13
#define DAC14_CS_GPIO_Port GPIOG
#define DAC15_CS_Pin GPIO_PIN_14
#define DAC15_CS_GPIO_Port GPIOG
#define DAC16_CS_Pin GPIO_PIN_15
#define DAC16_CS_GPIO_Port GPIOG
#define DAC1_CS_Pin GPIO_PIN_6 #define DAC1_CS_Pin GPIO_PIN_6
#define DAC1_CS_GPIO_Port GPIOB #define DAC1_CS_GPIO_Port GPIOB
#define DAC2_CS_Pin GPIO_PIN_7
#define DAC2_CS_GPIO_Port GPIOB
#define DAC3_CS_Pin GPIO_PIN_8
#define DAC3_CS_GPIO_Port GPIOB
#define DAC4_CS_Pin GPIO_PIN_9
#define DAC4_CS_GPIO_Port GPIOB
#define DAC5_CS_Pin GPIO_PIN_0
#define DAC5_CS_GPIO_Port GPIOE
#define DAC6_CS_Pin GPIO_PIN_1
#define DAC6_CS_GPIO_Port GPIOE
/* USER CODE BEGIN Private defines */ /* USER CODE BEGIN Private defines */
#define TRUE 0 #define TRUE 0

View File

@ -57,15 +57,15 @@ osThreadId ch438_taskHandle;
/* USER CODE END FunctionPrototypes */ /* USER CODE END FunctionPrototypes */
void start_lwip_task(void const * argument); void start_lwip_task(void const *argument);
void start_dac_task(void const * argument); void start_dac_task(void const *argument);
void start_ch438_task(void const * argument); void start_ch438_task(void const *argument);
extern void MX_LWIP_Init(void); extern void MX_LWIP_Init(void);
void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) */ void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) */
/* GetIdleTaskMemory prototype (linked to static allocation support) */ /* GetIdleTaskMemory prototype (linked to static allocation support) */
void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize ); void vApplicationGetIdleTaskMemory(StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize);
/* USER CODE BEGIN GET_IDLE_TASK_MEMORY */ /* USER CODE BEGIN GET_IDLE_TASK_MEMORY */
static StaticTask_t xIdleTaskTCBBuffer; static StaticTask_t xIdleTaskTCBBuffer;
@ -85,7 +85,8 @@ void vApplicationGetIdleTaskMemory(StaticTask_t **ppxIdleTaskTCBBuffer, StackTyp
* @param None * @param None
* @retval None * @retval None
*/ */
void MX_FREERTOS_Init(void) { void MX_FREERTOS_Init(void)
{
/* USER CODE BEGIN Init */ /* USER CODE BEGIN Init */
/* USER CODE END Init */ /* USER CODE END Init */
@ -122,7 +123,6 @@ void MX_FREERTOS_Init(void) {
/* USER CODE BEGIN RTOS_THREADS */ /* USER CODE BEGIN RTOS_THREADS */
/* add threads, ... */ /* add threads, ... */
/* USER CODE END RTOS_THREADS */ /* USER CODE END RTOS_THREADS */
} }
/* USER CODE BEGIN Header_start_lwip_task */ /* USER CODE BEGIN Header_start_lwip_task */
@ -132,7 +132,7 @@ void MX_FREERTOS_Init(void) {
* @retval None * @retval None
*/ */
/* USER CODE END Header_start_lwip_task */ /* USER CODE END Header_start_lwip_task */
void start_lwip_task(void const * argument) void start_lwip_task(void const *argument)
{ {
/* init code for LWIP */ /* init code for LWIP */
MX_LWIP_Init(); MX_LWIP_Init();
@ -140,7 +140,7 @@ void start_lwip_task(void const * argument)
/* Infinite loop */ /* Infinite loop */
for (;;) for (;;)
{ {
osDelay(10); osThreadTerminate(NULL);
} }
/* USER CODE END start_lwip_task */ /* USER CODE END start_lwip_task */
} }
@ -152,15 +152,19 @@ void start_lwip_task(void const * argument)
* @retval None * @retval None
*/ */
/* USER CODE END Header_start_dac_task */ /* USER CODE END Header_start_dac_task */
void start_dac_task(void const * argument) void start_dac_task(void const *argument)
{ {
/* USER CODE BEGIN start_dac_task */ /* USER CODE BEGIN start_dac_task */
/* Infinite loop */ /* Infinite loop */
dac161s997_init(); dac161s997_init();
for (;;) for (;;)
{ {
dac161s997_output(DAC161S997_1, 12.0f); uint8_t ch = 0;
osDelay(1); for (; ch < DAC_MAX_NUM; ch++)
{
dac161s997_output(ch, 12.0f);
}
vTaskDelay(100);
} }
/* USER CODE END start_dac_task */ /* USER CODE END start_dac_task */
} }
@ -172,7 +176,7 @@ void start_dac_task(void const * argument)
* @retval None * @retval None
*/ */
/* USER CODE END Header_start_ch438_task */ /* USER CODE END Header_start_ch438_task */
void start_ch438_task(void const * argument) void start_ch438_task(void const *argument)
{ {
/* USER CODE BEGIN start_ch438_task */ /* USER CODE BEGIN start_ch438_task */
/* Infinite loop */ /* Infinite loop */
@ -180,7 +184,6 @@ void start_ch438_task(void const * argument)
for (;;) for (;;)
{ {
uint8_t data[9] = {0xFF, 0xff, 0xff, 0xff, 0xff, 0x34, 0x56, 0x78, 0x9a}; uint8_t data[9] = {0xFF, 0xff, 0xff, 0xff, 0xff, 0x34, 0x56, 0x78, 0x9a};
ch438_test();
ch438_send_data(CH438_UART0, data, 9); ch438_send_data(CH438_UART0, data, 9);
osDelay(1000); osDelay(1000);
} }

View File

@ -51,54 +51,103 @@ void MX_GPIO_Init(void)
__HAL_RCC_GPIOC_CLK_ENABLE(); __HAL_RCC_GPIOC_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_GPIOD_CLK_ENABLE();
__HAL_RCC_GPIOG_CLK_ENABLE(); __HAL_RCC_GPIOG_CLK_ENABLE();
__HAL_RCC_GPIOD_CLK_ENABLE();
/*Configure GPIO pin Output Level */ /*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(PE5_LED_GPIO_Port, PE5_LED_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOE, DAC7_CS_Pin|DAC8_CS_Pin|DAC9_CS_Pin|PE5_LED_Pin
|HART7_RTS_Pin|HART6_RTS_Pin|DAC5_CS_Pin|DAC6_CS_Pin, GPIO_PIN_SET);
/*Configure GPIO pin Output Level */ /*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(HART_ALL_RST_GPIO_Port, HART_ALL_RST_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOF, HART11_RTS_Pin|HART10_RTS_Pin, GPIO_PIN_SET);
/*Configure GPIO pin Output Level */ /*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(CH438_1_AMOD_GPIO_Port, CH438_1_AMOD_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOA, HART_ALL_RST_Pin|HART15_RTS_Pin|HART14_RTS_Pin|HART12_RTS_Pin, GPIO_PIN_SET);
/*Configure GPIO pin Output Level */ /*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(HART1_RTS_GPIO_Port, HART1_RTS_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOB, HART9_RTS_Pin|DAC1_CS_Pin|DAC2_CS_Pin|DAC3_CS_Pin
|DAC4_CS_Pin, GPIO_PIN_SET);
/*Configure GPIO pin Output Level */ /*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(CH438_1_RST_GPIO_Port, CH438_1_RST_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(CH438_AMOD_GPIO_Port, CH438_AMOD_Pin, GPIO_PIN_RESET);
/*Configure GPIO pin Output Level */ /*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(DAC1_CS_GPIO_Port, DAC1_CS_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOG, HART8_RTS_Pin|HART2_RTS_Pin|HART1_RTS_Pin|HART16_RTS_Pin
|DAC11_CS_Pin|DAC12_CS_Pin|DAC13_CS_Pin|DAC14_CS_Pin
|DAC15_CS_Pin|DAC16_CS_Pin, GPIO_PIN_SET);
/*Configure GPIO pin : PtPin */ /*Configure GPIO pin Output Level */
GPIO_InitStruct.Pin = PE5_LED_Pin; HAL_GPIO_WritePin(GPIOD, HART5_RTS_Pin|HART4_RTS_Pin|HART3_RTS_Pin|CH438_RST_Pin
|DAC10_CS_Pin, GPIO_PIN_SET);
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(HART13_RTS_GPIO_Port, HART13_RTS_Pin, GPIO_PIN_SET);
/*Configure GPIO pins : PEPin PEPin PEPin PEPin
PEPin PEPin PEPin PEPin */
GPIO_InitStruct.Pin = DAC7_CS_Pin|DAC8_CS_Pin|DAC9_CS_Pin|PE5_LED_Pin
|HART7_RTS_Pin|HART6_RTS_Pin|DAC5_CS_Pin|DAC6_CS_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
HAL_GPIO_Init(PE5_LED_GPIO_Port, &GPIO_InitStruct); HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
/*Configure GPIO pin : PtPin */ /*Configure GPIO pins : PFPin PFPin */
GPIO_InitStruct.Pin = HART_ALL_RST_Pin; GPIO_InitStruct.Pin = HART11_RTS_Pin|HART10_RTS_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
HAL_GPIO_Init(HART_ALL_RST_GPIO_Port, &GPIO_InitStruct); HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
/*Configure GPIO pins : PAPin PAPin PAPin PAPin */
GPIO_InitStruct.Pin = HART_ALL_RST_Pin|HART15_RTS_Pin|HART14_RTS_Pin|HART12_RTS_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/*Configure GPIO pins : PBPin PBPin PBPin PBPin
PBPin */
GPIO_InitStruct.Pin = HART9_RTS_Pin|DAC1_CS_Pin|DAC2_CS_Pin|DAC3_CS_Pin
|DAC4_CS_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/*Configure GPIO pin : PtPin */ /*Configure GPIO pin : PtPin */
GPIO_InitStruct.Pin = CH438_1_AMOD_Pin; GPIO_InitStruct.Pin = CH438_AMOD_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_PULLDOWN; GPIO_InitStruct.Pull = GPIO_PULLDOWN;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
HAL_GPIO_Init(CH438_1_AMOD_GPIO_Port, &GPIO_InitStruct); HAL_GPIO_Init(CH438_AMOD_GPIO_Port, &GPIO_InitStruct);
/*Configure GPIO pin : PtPin */ /*Configure GPIO pins : PGPin PGPin PGPin PGPin
GPIO_InitStruct.Pin = HART1_RTS_Pin; PGPin PGPin PGPin PGPin
PGPin PGPin */
GPIO_InitStruct.Pin = HART8_RTS_Pin|HART2_RTS_Pin|HART1_RTS_Pin|HART16_RTS_Pin
|DAC11_CS_Pin|DAC12_CS_Pin|DAC13_CS_Pin|DAC14_CS_Pin
|DAC15_CS_Pin|DAC16_CS_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
HAL_GPIO_Init(HART1_RTS_GPIO_Port, &GPIO_InitStruct); HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
/*Configure GPIO pins : PDPin PDPin PDPin PDPin
PDPin */
GPIO_InitStruct.Pin = HART5_RTS_Pin|HART4_RTS_Pin|HART3_RTS_Pin|CH438_RST_Pin
|DAC10_CS_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
/*Configure GPIO pin : PtPin */
GPIO_InitStruct.Pin = HART13_RTS_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
HAL_GPIO_Init(HART13_RTS_GPIO_Port, &GPIO_InitStruct);
/*Configure GPIO pin : PtPin */ /*Configure GPIO pin : PtPin */
GPIO_InitStruct.Pin = CH438_INT_Pin; GPIO_InitStruct.Pin = CH438_INT_Pin;
@ -106,20 +155,6 @@ void MX_GPIO_Init(void)
GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(CH438_INT_GPIO_Port, &GPIO_InitStruct); HAL_GPIO_Init(CH438_INT_GPIO_Port, &GPIO_InitStruct);
/*Configure GPIO pin : PtPin */
GPIO_InitStruct.Pin = CH438_1_RST_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
HAL_GPIO_Init(CH438_1_RST_GPIO_Port, &GPIO_InitStruct);
/*Configure GPIO pin : PtPin */
GPIO_InitStruct.Pin = DAC1_CS_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
HAL_GPIO_Init(DAC1_CS_GPIO_Port, &GPIO_InitStruct);
/* EXTI interrupt init*/ /* EXTI interrupt init*/
HAL_NVIC_SetPriority(EXTI2_IRQn, 5, 0); HAL_NVIC_SetPriority(EXTI2_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(EXTI2_IRQn); HAL_NVIC_EnableIRQ(EXTI2_IRQn);

View File

@ -149,8 +149,7 @@ void SystemClock_Config(void)
/** Initializes the CPU, AHB and APB buses clocks /** Initializes the CPU, AHB and APB buses clocks
*/ */
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
@ -167,7 +166,7 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{ {
if (CH438_INT_Pin == GPIO_Pin) if (CH438_INT_Pin == GPIO_Pin)
{ {
ch438_interrupt_handler(); ch438_interrupt_handler_ch438_chip_1();
} }
} }
/* USER CODE END 4 */ /* USER CODE END 4 */
@ -185,7 +184,8 @@ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
/* USER CODE BEGIN Callback 0 */ /* USER CODE BEGIN Callback 0 */
/* USER CODE END Callback 0 */ /* USER CODE END Callback 0 */
if (htim->Instance == TIM4) { if (htim->Instance == TIM4)
{
HAL_IncTick(); HAL_IncTick();
} }
/* USER CODE BEGIN Callback 1 */ /* USER CODE BEGIN Callback 1 */

File diff suppressed because it is too large Load Diff

View File

@ -24,7 +24,7 @@ const uint8_t Interruptnum[] = {
0x80, 0x80,
}; /* SSR寄存器中断号对应值 */ }; /* SSR寄存器中断号对应值 */
uint8_t receive_data_buff[256]; ch438_uart_data_t ch438_uart_data[16] = {0};
uint8_t receive_data_len; uint8_t receive_data_len;
static void ch438_tranconfig(uint8_t uart_num); static void ch438_tranconfig(uint8_t uart_num);
@ -39,10 +39,20 @@ static void ch438_set_baudrate(uint8_t uart_num, uint32_t baudrate);
*/ */
void ch438_tranconfig(uint8_t uart_num) void ch438_tranconfig(uint8_t uart_num)
{ {
uint8_t ch438_num = 0;
if (uart_num < 8)
{
ch438_num = CH438_CHIP0;
}
else
{
ch438_num = CH438_CHIP1;
uart_num -= 8;
}
// 设置串口通讯的格式8个数据位1个停止位1个校验位奇校验 // 设置串口通讯的格式8个数据位1个停止位1个校验位奇校验
ch438_write_reg(offsetadd[uart_num] | REG_LCR_ADDR, BIT_LCR_PAREN | BIT_LCR_WORDSZ1 | BIT_LCR_WORDSZ0, 1); ch438_write_reg(ch438_num, offsetadd[uart_num] | REG_LCR_ADDR, BIT_LCR_PAREN | BIT_LCR_WORDSZ1 | BIT_LCR_WORDSZ0, 1);
/* 设置FIFO模式触发点为112个字节 */ /* 设置FIFO模式触发点为112个字节 */
ch438_write_reg(offsetadd[uart_num] | REG_FCR_ADDR, BIT_FCR_RECVTG0 | BIT_FCR_RECVTG1 | BIT_FCR_FIFOEN, 1); ch438_write_reg(ch438_num, offsetadd[uart_num] | REG_FCR_ADDR, BIT_FCR_RECVTG0 | BIT_FCR_RECVTG1 | BIT_FCR_FIFOEN, 1);
} }
/** /**
@ -57,17 +67,26 @@ static void ch438_set_baudrate(uint8_t uart_num, uint32_t baudrate)
{ {
uint8_t dlab = 0; uint8_t dlab = 0;
uint16_t bandspeed; uint16_t bandspeed;
uint8_t ch438_num = 0;
dlab = ch438_read_reg(offsetadd[uart_num] | REG_LCR_ADDR, 1); if (uart_num < 8)
{
ch438_num = CH438_CHIP0;
}
else
{
ch438_num = CH438_CHIP1;
uart_num -= 8;
}
dlab = ch438_read_reg(ch438_num, offsetadd[uart_num] | REG_LCR_ADDR, 1);
dlab |= 0x80; // 置LCR寄存器的DLAB位为1 dlab |= 0x80; // 置LCR寄存器的DLAB位为1
ch438_write_reg(offsetadd[uart_num] | REG_LCR_ADDR, dlab, 1); ch438_write_reg(ch438_num, offsetadd[uart_num] | REG_LCR_ADDR, dlab, 1);
bandspeed = CH438_CLK / 16 / baudrate; bandspeed = CH438_CLK / 16 / baudrate;
ch438_write_reg(offsetadd[uart_num] | REG_DLL_ADDR, (uint8_t)bandspeed, 1); ch438_write_reg(ch438_num, offsetadd[uart_num] | REG_DLL_ADDR, (uint8_t)bandspeed, 1);
ch438_write_reg(offsetadd[uart_num] | REG_DLM_ADDR, (uint8_t)(bandspeed >> 8), 1); ch438_write_reg(ch438_num, offsetadd[uart_num] | REG_DLM_ADDR, (uint8_t)(bandspeed >> 8), 1);
dlab &= 0x7F; // 置LCR寄存器的DLAB位为0 dlab &= 0x7F; // 置LCR寄存器的DLAB位为0
ch438_write_reg(offsetadd[uart_num] | REG_LCR_ADDR, dlab, 1); ch438_write_reg(ch438_num, offsetadd[uart_num] | REG_LCR_ADDR, dlab, 1);
} }
/** /**
@ -79,10 +98,18 @@ static void ch438_set_baudrate(uint8_t uart_num, uint32_t baudrate)
* @param data * @param data
* @param size * @param size
*/ */
void ch438_write_reg(uint8_t addr, uint8_t data, uint8_t size) void ch438_write_reg(uint8_t ch438_num, uint8_t addr, uint8_t data, uint8_t size)
{ {
if (ch438_num == CH438_CHIP0)
{
uint32_t *address = (uint32_t *)(0x60000000 + addr); uint32_t *address = (uint32_t *)(0x60000000 + addr);
HAL_SRAM_Write_8b(&hsram1, address, &data, size); HAL_SRAM_Write_8b(&hsram1, address, &data, size);
}
else if (ch438_num == CH438_CHIP1)
{
uint32_t *address = (uint32_t *)(0x64000000 + addr);
HAL_SRAM_Write_8b(&hsram2, address, &data, size);
}
} }
/** /**
@ -95,27 +122,22 @@ void ch438_write_reg(uint8_t addr, uint8_t data, uint8_t size)
* *
* @return * @return
*/ */
uint8_t ch438_read_reg(uint8_t addr, uint8_t size) uint8_t ch438_read_reg(uint8_t ch438_num, uint8_t addr, uint8_t size)
{ {
uint8_t data = 0; uint8_t data = 0;
if (ch438_num == CH438_CHIP0)
{
uint32_t *address = (uint32_t *)(0x60000000 + addr); uint32_t *address = (uint32_t *)(0x60000000 + addr);
HAL_SRAM_Read_8b(&hsram1, address, &data, size); HAL_SRAM_Read_8b(&hsram1, address, &data, size);
}
else if (ch438_num == CH438_CHIP1)
{
uint32_t *address = (uint32_t *)(0x64000000 + addr);
HAL_SRAM_Read_8b(&hsram2, address, &data, size);
}
return data; return data;
} }
void ch438_test(void)
{
uint8_t reg_data[16] = {0};
reg_data[0] = 0xAA;
ch438_write_reg(offsetadd[0] | REG_SCR_ADDR, reg_data[0], 1);
reg_data[1] = ch438_read_reg(offsetadd[0] | REG_SCR_ADDR, 1);
reg_data[2] = ch438_read_reg(offsetadd[0] | REG_IER_ADDR, 1);
reg_data[3] = ch438_read_reg(offsetadd[0] | REG_IIR_ADDR, 1);
reg_data[4] = ch438_read_reg(offsetadd[0] | REG_LCR_ADDR, 1);
}
/** /**
* @brief UART * @brief UART
* *
@ -127,7 +149,8 @@ void ch438_reset_all_uart(void)
{ {
for (uint8_t i = 0; i < 8; i++) for (uint8_t i = 0; i < 8; i++)
{ {
ch438_write_reg(offsetadd[CH438_UART0 + i] | REG_IER_ADDR, BIT_IER_RESET, 1); ch438_write_reg(CH438_CHIP0, offsetadd[CH438_UART0 + i] | REG_IER_ADDR, BIT_IER_RESET, 1);
ch438_write_reg(CH438_CHIP1, offsetadd[CH438_UART0 + i] | REG_IER_ADDR, BIT_IER_RESET, 1);
} }
} }
@ -140,7 +163,17 @@ void ch438_reset_all_uart(void)
*/ */
void ch438_close_uart(uint8_t uart_num) void ch438_close_uart(uint8_t uart_num)
{ {
ch438_write_reg(offsetadd[uart_num] | REG_IER_ADDR, BIT_IER_LOWPOWER, 1); uint8_t ch438_num = 0;
if (uart_num < 8)
{
ch438_num = CH438_CHIP0;
}
else
{
ch438_num = CH438_CHIP1;
uart_num -= 8;
}
ch438_write_reg(ch438_num, offsetadd[uart_num] | REG_IER_ADDR, BIT_IER_LOWPOWER, 1);
} }
/** /**
@ -154,8 +187,8 @@ void ch438_close_uart(uint8_t uart_num)
*/ */
void ch438_close_all_uart(void) void ch438_close_all_uart(void)
{ {
ch438_write_reg(CH438_CHIP0, offsetadd[CH438_UART0] | REG_IER_ADDR, BIT_IER_LOWPOWER | BIT_IER_SLP, 1); // 数据手册描述SLP和LOWPOWER同时为1关闭时钟振荡器所有串口进入休眠
ch438_write_reg(offsetadd[CH438_UART0] | REG_IER_ADDR, BIT_IER_LOWPOWER | BIT_IER_SLP, 1); // 数据手册描述SLP和LOWPOWER同时为1关闭时钟振荡器所有串口进入休眠 ch438_write_reg(CH438_CHIP1, offsetadd[CH438_UART0] | REG_IER_ADDR, BIT_IER_LOWPOWER | BIT_IER_SLP, 1); // 数据手册描述SLP
} }
/** /**
@ -168,6 +201,7 @@ void ch438_close_all_uart(void)
*/ */
void ch438_init_uart(uint8_t uart_num, uint32_t baudrate) void ch438_init_uart(uint8_t uart_num, uint32_t baudrate)
{ {
ch438_tranconfig(uart_num); ch438_tranconfig(uart_num);
ch438_set_baudrate(uart_num, baudrate); ch438_set_baudrate(uart_num, baudrate);
} }
@ -183,7 +217,17 @@ void ch438_init_uart(uint8_t uart_num, uint32_t baudrate)
*/ */
uint8_t ch438_check_iir_reg(uint8_t uart_num) uint8_t ch438_check_iir_reg(uint8_t uart_num)
{ {
return ch438_read_reg(offsetadd[uart_num] | REG_IIR_ADDR, 1); uint8_t ch438_num = 0;
if (uart_num < 8)
{
ch438_num = CH438_CHIP0;
}
else
{
ch438_num = CH438_CHIP1;
uart_num -= 8;
}
return ch438_read_reg(ch438_num, offsetadd[uart_num] | REG_IIR_ADDR, 1);
} }
/** /**
@ -195,29 +239,59 @@ uint8_t ch438_check_iir_reg(uint8_t uart_num)
*/ */
void ch438_init_config(uint8_t uart_num) void ch438_init_config(uint8_t uart_num)
{ {
uint8_t ch438_num = 0;
if (uart_num < 8)
{
ch438_num = CH438_CHIP0;
}
else
{
ch438_num = CH438_CHIP1;
uart_num -= 8;
}
/* CH438打开BIT_IER_IETHRE会产生一个发送空中断 */ /* CH438打开BIT_IER_IETHRE会产生一个发送空中断 */
ch438_write_reg(offsetadd[uart_num] | REG_IER_ADDR, BIT_IER_IELINES | BIT_IER_IETHRE | BIT_IER_IERECV, 1); ch438_write_reg(ch438_num, offsetadd[uart_num] | REG_IER_ADDR, BIT_IER_IELINES | BIT_IER_IETHRE | BIT_IER_IERECV, 1);
ch438_check_iir_reg(uart_num); ch438_check_iir_reg(uart_num);
ch438_write_reg(offsetadd[uart_num] | REG_MCR_ADDR, BIT_MCR_OUT2, 1); ch438_write_reg(ch438_num, offsetadd[uart_num] | REG_MCR_ADDR, BIT_MCR_OUT2, 1);
} }
void ch438_send_data(uint8_t uart_num, uint8_t *data, uint16_t len) void ch438_send_data(uint8_t uart_num, uint8_t *data, uint16_t len)
{ {
HART1_RTS_SEND; hart_ht1200m_rts_io_send(uart_num);
uint8_t ch438_num = 0;
if (uart_num < 8)
{
ch438_num = CH438_CHIP0;
}
else
{
ch438_num = CH438_CHIP1;
uart_num -= 8;
}
for (uint8_t i = 0; i < len; i++) for (uint8_t i = 0; i < len; i++)
{ {
ch438_write_reg(offsetadd[uart_num] | REG_THR_ADDR, data[i], 1); ch438_write_reg(ch438_num, offsetadd[uart_num] | REG_THR_ADDR, data[i], 1);
} }
} }
uint8_t ch438_recv_data(uint8_t uart_num, uint8_t *data) uint8_t ch438_recv_data(uint8_t uart_num, uint8_t *data)
{ {
uint8_t data_len = 0; uint8_t data_len = 0;
uint8_t *receive_data; uint8_t *receive_data;
receive_data = data; receive_data = data;
uint16_t time_out = 1000; uint16_t time_out = 1000;
uint8_t ch438_num = 0;
if (uart_num < 8)
{
ch438_num = CH438_CHIP0;
}
else
{
ch438_num = CH438_CHIP1;
uart_num -= 8;
}
// 等待数据准备好 // 等待数据准备好
while ((ch438_read_reg(offsetadd[uart_num] | REG_LSR_ADDR, 1) & BIT_LSR_DATARDY) == 0) while ((ch438_read_reg(ch438_num, offsetadd[uart_num] | REG_LSR_ADDR, 1) & BIT_LSR_DATARDY) == 0)
{ {
time_out--; time_out--;
if (time_out == 0) if (time_out == 0)
@ -225,9 +299,9 @@ uint8_t ch438_recv_data(uint8_t uart_num, uint8_t *data)
break; break;
} }
} }
while ((ch438_read_reg(offsetadd[uart_num] | REG_LSR_ADDR, 1) & BIT_LSR_DATARDY)) while ((ch438_read_reg(ch438_num, offsetadd[uart_num] | REG_LSR_ADDR, 1) & BIT_LSR_DATARDY))
{ {
*receive_data = ch438_read_reg(offsetadd[uart_num] | REG_RBR_ADDR, 1); *receive_data = ch438_read_reg(ch438_num, offsetadd[uart_num] | REG_RBR_ADDR, 1);
receive_data++; receive_data++;
data_len++; data_len++;
if (data_len == 112) if (data_len == 112)
@ -238,13 +312,13 @@ uint8_t ch438_recv_data(uint8_t uart_num, uint8_t *data)
return data_len; return data_len;
} }
void ch438_interrupt_handler(void) void ch438_interrupt_handler_ch438_chip_1(void)
{ {
uint8_t gInterruptStatus; /* 全局中断状态 */ uint8_t gInterruptStatus; /* 全局中断状态 */
uint8_t InterruptStatus; /* 独立串口中断状态 */ uint8_t InterruptStatus; /* 独立串口中断状态 */
uint8_t i; uint8_t i;
uint8_t ch438_num = CH438_CHIP0;
gInterruptStatus = ch438_read_reg(REG_SSR_ADDR, 1); gInterruptStatus = ch438_read_reg(ch438_num, REG_SSR_ADDR, 1);
if (!gInterruptStatus) if (!gInterruptStatus)
{ {
@ -255,28 +329,75 @@ void ch438_interrupt_handler(void)
{ {
if (gInterruptStatus & Interruptnum[i]) /* 检测哪个串口发生中断 */ if (gInterruptStatus & Interruptnum[i]) /* 检测哪个串口发生中断 */
{ {
InterruptStatus = ch438_read_reg(offsetadd[i] | REG_IIR_ADDR, 1) & 0x0f; /* 读串口的中断状态 */ InterruptStatus = ch438_read_reg(ch438_num, offsetadd[i] | REG_IIR_ADDR, 1) & 0x0f; /* 读串口的中断状态 */
switch (InterruptStatus) switch (InterruptStatus)
{ {
case INT_NOINT: /* 没有中断 */ case INT_NOINT: /* 没有中断 */
break; break;
case INT_THR_EMPTY: /* THR空中断 */ case INT_THR_EMPTY: /* THR空中断 */
HART1_RTS_RECEIVE; hart_ht1200m_rts_io_receive(i);
break; break;
case INT_RCV_OVERTIME: /* 接收超时中断 */ case INT_RCV_OVERTIME: /* 接收超时中断 */
receive_data_len = ch438_recv_data(i, receive_data_buff); ch438_uart_data[i].receive_data_length = ch438_recv_data(i, ch438_uart_data[i].receive_data_buff);
ch438_send_data(i, receive_data_buff, receive_data_len); ch438_send_data(i, ch438_uart_data[i].receive_data_buff, ch438_uart_data[i].receive_data_length);
break; break;
case INT_RCV_SUCCESS: /* 接收数据可用中断 */ case INT_RCV_SUCCESS: /* 接收数据可用中断 */
receive_data_len = ch438_recv_data(i, receive_data_buff); ch438_uart_data[i].receive_data_length = ch438_recv_data(i, ch438_uart_data[i].receive_data_buff);
ch438_send_data(i, receive_data_buff, receive_data_len); ch438_send_data(i, ch438_uart_data[i].receive_data_buff, ch438_uart_data[i].receive_data_length);
break; break;
case INT_RCV_LINES: /* 接收线路状态中断 */ case INT_RCV_LINES: /* 接收线路状态中断 */
ch438_read_reg(offsetadd[i] | REG_LSR_ADDR, 1); ch438_read_reg(ch438_num, offsetadd[i] | REG_LSR_ADDR, 1);
break; break;
case INT_MODEM_CHANGE: /* MODEM输入变化中断 */ case INT_MODEM_CHANGE: /* MODEM输入变化中断 */
ch438_read_reg(offsetadd[i] | REG_MSR_ADDR, 1); ch438_read_reg(ch438_num, offsetadd[i] | REG_MSR_ADDR, 1);
break;
default:
break;
}
}
}
}
void ch438_interrupt_handler_ch438_chip_2(void)
{
uint8_t gInterruptStatus; /* 全局中断状态 */
uint8_t InterruptStatus; /* 独立串口中断状态 */
uint8_t i;
uint8_t ch438_num = CH438_CHIP1;
gInterruptStatus = ch438_read_reg(ch438_num, REG_SSR_ADDR, 1);
if (!gInterruptStatus)
{
return;
}
for (i = 8; i < 16; i++)
{
if (gInterruptStatus & Interruptnum[i - 8]) /* 检测哪个串口发生中断 */
{
InterruptStatus = ch438_read_reg(ch438_num, offsetadd[i - 8] | REG_IIR_ADDR, 1) & 0x0f; /* 读串口的中断状态 */
switch (InterruptStatus)
{
case INT_NOINT: /* 没有中断 */
break;
case INT_THR_EMPTY: /* THR空中断 */
hart_ht1200m_rts_io_receive(i);
break;
case INT_RCV_OVERTIME: /* 接收超时中断 */
ch438_uart_data[i].receive_data_length = ch438_recv_data(i, ch438_uart_data[i].receive_data_buff);
ch438_send_data(i, ch438_uart_data[i].receive_data_buff, ch438_uart_data[i].receive_data_length);
break;
case INT_RCV_SUCCESS: /* 接收数据可用中断 */
ch438_uart_data[i].receive_data_length = ch438_recv_data(i, ch438_uart_data[i].receive_data_buff);
ch438_send_data(i, ch438_uart_data[i].receive_data_buff, ch438_uart_data[i].receive_data_length);
break;
case INT_RCV_LINES: /* 接收线路状态中断 */
ch438_read_reg(ch438_num, offsetadd[i - 8] | REG_LSR_ADDR, 1);
break;
case INT_MODEM_CHANGE: /* MODEM输入变化中断 */
ch438_read_reg(ch438_num, offsetadd[i - 8] | REG_MSR_ADDR, 1);
break; break;
default: default:
break; break;
@ -287,8 +408,13 @@ void ch438_interrupt_handler(void)
void ch438_init(void) void ch438_init(void)
{ {
uint8_t i;
ch438_reset_all_uart(); ch438_reset_all_uart();
HAL_Delay(250); HAL_Delay(250);
ch438_init_uart(CH438_UART0, 1200); for (i = 0; i < 16; i++)
ch438_init_config(CH438_UART0); {
ch438_init_uart(i, 1200);
ch438_init_config(i);
}
} }

View File

@ -1,7 +1,6 @@
#ifndef __CH438Q_H__ #ifndef __CH438Q_H__
#define __CH438Q_H__ #define __CH438Q_H__
#include "main.h" #include "main.h"
/* CH438串口寄存器地址 */ /* CH438串口寄存器地址 */
#define REG_RBR_ADDR 0x00 /* 串口0接收缓冲寄存器地址 */ #define REG_RBR_ADDR 0x00 /* 串口0接收缓冲寄存器地址 */
@ -119,11 +118,24 @@ typedef enum
CH438_UART5, CH438_UART5,
CH438_UART6, CH438_UART6,
CH438_UART7, CH438_UART7,
} ch438_uart_e;
void ch438_write_reg(uint8_t addr, uint8_t data, uint8_t size); } ch438_uart_e;
uint8_t ch438_read_reg(uint8_t addr, uint8_t size); typedef enum
void ch438_test(void); {
CH438_CHIP0 = 0,
CH438_CHIP1,
} ch438_chip_e;
typedef struct
{
uint8_t receive_data_buff[256];
uint8_t receive_data_length;
} ch438_uart_data_t;
extern ch438_uart_data_t ch438_uart_data[16];
void ch438_write_reg(uint8_t ch438_num, uint8_t addr, uint8_t data, uint8_t size);
uint8_t ch438_read_reg(uint8_t ch438_num, uint8_t addr, uint8_t size);
void ch438_reset_all_uart(void); void ch438_reset_all_uart(void);
void ch438_close_uart(uint8_t uart_num); void ch438_close_uart(uint8_t uart_num);
void ch438_close_all_uart(void); void ch438_close_all_uart(void);
@ -132,8 +144,8 @@ uint8_t ch438_check_iir_reg(uint8_t uart_num);
void ch438_init_config(uint8_t uart_num); void ch438_init_config(uint8_t uart_num);
void ch438_send_data(uint8_t uart_num, uint8_t *data, uint16_t len); void ch438_send_data(uint8_t uart_num, uint8_t *data, uint16_t len);
uint8_t ch438_recv_data(uint8_t uart_num, uint8_t *data); uint8_t ch438_recv_data(uint8_t uart_num, uint8_t *data);
void ch438_interrupt_handler(void); void ch438_interrupt_handler_ch438_chip_1(void);
void ch438_interrupt_handler_ch438_chip_2(void);
void ch438_init(void); void ch438_init(void);
#endif #endif

View File

@ -9,16 +9,15 @@
* @param reg * @param reg
* @param data 16 * @param data 16
*/ */
void dac161s997_write_reg(chip_type_e dac_num, uint8_t reg, uint16_t data) void dac161s997_write_reg(uint8_t dac_num, uint8_t reg, uint16_t data)
{ {
uint8_t data_buffer[3] = {0, 0, 0}; uint8_t data_buffer[3] = {0, 0, 0};
data_buffer[0] = reg; data_buffer[0] = reg;
data_buffer[1] = data >> 8; data_buffer[1] = data >> 8;
data_buffer[2] = data; data_buffer[2] = data;
// board_spi_init(dac_num); // 初始化SPI因为ADC芯片也用SPI1但是时序不同 dac161s997_cs_on(dac_num);
board_spi_cs_on(dac_num);
spi_transmit_receive(&hspi1, data_buffer, 3); spi_transmit_receive(&hspi1, data_buffer, 3);
board_spi_cs_off(dac_num); dac161s997_cs_off(dac_num);
} }
/** /**
@ -26,11 +25,12 @@ void dac161s997_write_reg(chip_type_e dac_num, uint8_t reg, uint16_t data)
*/ */
void dac161s997_init(void) void dac161s997_init(void)
{ {
dac161s997_write_reg(DAC161S997_1, DAC161S997_ERR_LOW_REG, 0xFFFF); uint8_t i;
dac161s997_write_reg(DAC161S997_1, DAC161S997_ERR_CONFIG_REG, 0x070E); for (i = 0; i < DAC_MAX_NUM; i++)
{
// dac161s997_write_reg(DAC161S997_2, DAC161S997_ERR_LOW_REG, 0xFFFF); dac161s997_write_reg(DAC161S997_1 + i, DAC161S997_ERR_LOW_REG, 0xFFFF);
// dac161s997_write_reg(DAC161S997_2, DAC161S997_ERR_CONFIG_REG, 0x070E); dac161s997_write_reg(DAC161S997_1 + i, DAC161S997_ERR_CONFIG_REG, 0x070E);
}
} }
/** /**
@ -41,15 +41,14 @@ void dac161s997_init(void)
* @param dac_num DAC芯片类型 * @param dac_num DAC芯片类型
* @param current * @param current
*/ */
void dac161s997_output(chip_type_e dac_num, float current) void dac161s997_output(uint8_t dac_num, float current)
{ {
uint32_t dac_code = (uint32_t)((current * 65535.0f) / 24.0f); uint32_t dac_code = (uint32_t)((current * 65535.0f) / 24.0f);
uint8_t data_buffer[3] = {0, 0, 0}; uint8_t data_buffer[3] = {0, 0, 0};
data_buffer[0] = DAC161S997_DACCODE_REG; data_buffer[0] = DAC161S997_DACCODE_REG;
data_buffer[1] = dac_code >> 8; data_buffer[1] = dac_code >> 8;
data_buffer[2] = dac_code; data_buffer[2] = dac_code;
// board_spi_init(dac_num); // 初始化SPI因为ADC芯片也用SPI1但是时序不同 dac161s997_cs_on(dac_num);
board_spi_cs_on(dac_num);
spi_transmit_receive(&hspi1, data_buffer, 3); spi_transmit_receive(&hspi1, data_buffer, 3);
board_spi_cs_off(dac_num); dac161s997_cs_off(dac_num);
} }

View File

@ -1,20 +1,127 @@
#include "ht1200m.h" #include "ht1200m.h"
void hart_ht1200m_rts_io_send(uint8_t channel)
{
switch (channel)
{
case 0:
HART1_RTS_SEND;
break;
case 1:
HART2_RTS_SEND;
break;
case 2:
HART3_RTS_SEND;
break;
case 3:
HART4_RTS_SEND;
break;
case 4:
HART5_RTS_SEND;
break;
case 5:
HART6_RTS_SEND;
break;
case 6:
HART7_RTS_SEND;
break;
case 7:
HART8_RTS_SEND;
break;
case 8:
HART9_RTS_SEND;
break;
case 9:
HART10_RTS_SEND;
break;
case 10:
HART11_RTS_SEND;
break;
case 11:
HART12_RTS_SEND;
break;
case 12:
HART13_RTS_SEND;
break;
case 13:
HART14_RTS_SEND;
break;
case 14:
HART15_RTS_SEND;
break;
case 15:
HART16_RTS_SEND;
break;
default:
break;
}
}
void hart_ht1200m_rts_io_receive(uint8_t channel)
{
switch (channel)
{
case 0:
HART1_RTS_RECEIVE;
break;
case 1:
HART2_RTS_RECEIVE;
break;
case 2:
HART3_RTS_RECEIVE;
break;
case 3:
HART4_RTS_RECEIVE;
break;
case 4:
HART5_RTS_RECEIVE;
break;
case 5:
HART6_RTS_RECEIVE;
break;
case 6:
HART7_RTS_RECEIVE;
break;
case 7:
HART8_RTS_RECEIVE;
break;
case 8:
HART9_RTS_RECEIVE;
break;
case 9:
HART10_RTS_RECEIVE;
break;
case 10:
HART11_RTS_RECEIVE;
break;
case 11:
HART12_RTS_RECEIVE;
break;
case 12:
HART13_RTS_RECEIVE;
break;
case 13:
HART14_RTS_RECEIVE;
break;
case 14:
HART15_RTS_RECEIVE;
break;
case 15:
HART16_RTS_RECEIVE;
break;
default:
break;
}
}
/**
* @brief hart_ht1200m模块
*
* hart_ht1200m模块RTS引脚实现
*
*
* 1. HART1和HART2的复位引脚置高电平
* 2. 10
* 3. HART1和HART2的复位引脚置低电平
* 4. HART1和HART2的RTS引脚设置为接收状态
*/
extern void hart_ht1200m_reset(void) extern void hart_ht1200m_reset(void)
{ {
uint8_t i = 0;
HART_RESET_ON; HART_RESET_ON;
HAL_Delay(10); HAL_Delay(10);
HART_RESET_OFF; HART_RESET_OFF;
HART1_RTS_RECEIVE; for (i = 0; i < 16; i++)
{
hart_ht1200m_rts_io_receive(i);
}
} }

View File

@ -9,8 +9,52 @@
#define HART1_RTS_RECEIVE HAL_GPIO_WritePin(HART1_RTS_GPIO_Port, HART1_RTS_Pin, GPIO_PIN_SET) #define HART1_RTS_RECEIVE HAL_GPIO_WritePin(HART1_RTS_GPIO_Port, HART1_RTS_Pin, GPIO_PIN_SET)
#define HART1_RTS_SEND HAL_GPIO_WritePin(HART1_RTS_GPIO_Port, HART1_RTS_Pin, GPIO_PIN_RESET) // 拉低引脚发送 #define HART1_RTS_SEND HAL_GPIO_WritePin(HART1_RTS_GPIO_Port, HART1_RTS_Pin, GPIO_PIN_RESET) // 拉低引脚发送
// #define HART2_RTS_RECEIVE HAL_GPIO_WritePin(HART2_RTS_GPIO_Port, HART2_RTS_Pin, GPIO_PIN_SET) #define HART2_RTS_RECEIVE HAL_GPIO_WritePin(HART2_RTS_GPIO_Port, HART2_RTS_Pin, GPIO_PIN_SET)
// #define HART2_RTS_SEND HAL_GPIO_WritePin(HART2_RTS_GPIO_Port, HART2_RTS_Pin, GPIO_PIN_RESET) // 拉低引脚发送 #define HART2_RTS_SEND HAL_GPIO_WritePin(HART2_RTS_GPIO_Port, HART2_RTS_Pin, GPIO_PIN_RESET) // 拉低引脚发送
#define HART3_RTS_RECEIVE HAL_GPIO_WritePin(HART3_RTS_GPIO_Port, HART3_RTS_Pin, GPIO_PIN_SET)
#define HART3_RTS_SEND HAL_GPIO_WritePin(HART3_RTS_GPIO_Port, HART3_RTS_Pin, GPIO_PIN_RESET) // 拉低引脚发送
#define HART4_RTS_RECEIVE HAL_GPIO_WritePin(HART4_RTS_GPIO_Port, HART4_RTS_Pin, GPIO_PIN_SET)
#define HART4_RTS_SEND HAL_GPIO_WritePin(HART4_RTS_GPIO_Port, HART4_RTS_Pin, GPIO_PIN_RESET) // 拉低引脚发送
#define HART5_RTS_RECEIVE HAL_GPIO_WritePin(HART5_RTS_GPIO_Port, HART5_RTS_Pin, GPIO_PIN_SET)
#define HART5_RTS_SEND HAL_GPIO_WritePin(HART5_RTS_GPIO_Port, HART5_RTS_Pin, GPIO_PIN_RESET) // 拉低引脚发送
#define HART6_RTS_RECEIVE HAL_GPIO_WritePin(HART6_RTS_GPIO_Port, HART6_RTS_Pin, GPIO_PIN_SET)
#define HART6_RTS_SEND HAL_GPIO_WritePin(HART6_RTS_GPIO_Port, HART6_RTS_Pin, GPIO_PIN_RESET) // 拉低引脚发送
#define HART7_RTS_RECEIVE HAL_GPIO_WritePin(HART7_RTS_GPIO_Port, HART7_RTS_Pin, GPIO_PIN_SET)
#define HART7_RTS_SEND HAL_GPIO_WritePin(HART7_RTS_GPIO_Port, HART7_RTS_Pin, GPIO_PIN_RESET) // 拉低引脚发送
#define HART8_RTS_RECEIVE HAL_GPIO_WritePin(HART8_RTS_GPIO_Port, HART8_RTS_Pin, GPIO_PIN_SET)
#define HART8_RTS_SEND HAL_GPIO_WritePin(HART8_RTS_GPIO_Port, HART8_RTS_Pin, GPIO_PIN_RESET) // 拉低引脚发送
#define HART9_RTS_RECEIVE HAL_GPIO_WritePin(HART9_RTS_GPIO_Port, HART9_RTS_Pin, GPIO_PIN_SET)
#define HART9_RTS_SEND HAL_GPIO_WritePin(HART9_RTS_GPIO_Port, HART9_RTS_Pin, GPIO_PIN_RESET) // 拉低引脚发送
#define HART10_RTS_RECEIVE HAL_GPIO_WritePin(HART10_RTS_GPIO_Port, HART10_RTS_Pin, GPIO_PIN_SET)
#define HART10_RTS_SEND HAL_GPIO_WritePin(HART10_RTS_GPIO_Port, HART10_RTS_Pin, GPIO_PIN_RESET) // 拉低引脚发送
#define HART11_RTS_RECEIVE HAL_GPIO_WritePin(HART11_RTS_GPIO_Port, HART11_RTS_Pin, GPIO_PIN_SET)
#define HART11_RTS_SEND HAL_GPIO_WritePin(HART11_RTS_GPIO_Port, HART11_RTS_Pin, GPIO_PIN_RESET) // 拉低引脚发送
#define HART12_RTS_RECEIVE HAL_GPIO_WritePin(HART12_RTS_GPIO_Port, HART12_RTS_Pin, GPIO_PIN_SET)
#define HART12_RTS_SEND HAL_GPIO_WritePin(HART12_RTS_GPIO_Port, HART12_RTS_Pin, GPIO_PIN_RESET) // 拉低引脚发送
#define HART13_RTS_RECEIVE HAL_GPIO_WritePin(HART13_RTS_GPIO_Port, HART13_RTS_Pin, GPIO_PIN_SET)
#define HART13_RTS_SEND HAL_GPIO_WritePin(HART13_RTS_GPIO_Port, HART13_RTS_Pin, GPIO_PIN_RESET) // 拉低引脚发送
#define HART14_RTS_RECEIVE HAL_GPIO_WritePin(HART14_RTS_GPIO_Port, HART14_RTS_Pin, GPIO_PIN_SET)
#define HART14_RTS_SEND HAL_GPIO_WritePin(HART14_RTS_GPIO_Port, HART14_RTS_Pin, GPIO_PIN_RESET) // 拉低引脚发送
#define HART15_RTS_RECEIVE HAL_GPIO_WritePin(HART15_RTS_GPIO_Port, HART15_RTS_Pin, GPIO_PIN_SET)
#define HART15_RTS_SEND HAL_GPIO_WritePin(HART15_RTS_GPIO_Port, HART15_RTS_Pin, GPIO_PIN_RESET) // 拉低引脚发送
#define HART16_RTS_RECEIVE HAL_GPIO_WritePin(HART16_RTS_GPIO_Port, HART16_RTS_Pin, GPIO_PIN_SET)
#define HART16_RTS_SEND HAL_GPIO_WritePin(HART16_RTS_GPIO_Port, HART16_RTS_Pin, GPIO_PIN_RESET) // 拉低引脚发送
extern void hart_ht1200m_reset(void); extern void hart_ht1200m_reset(void);
extern void hart_ht1200m_rts_io_send(uint8_t channel);
extern void hart_ht1200m_rts_io_receive(uint8_t channel);
#endif #endif

View File

@ -13,26 +13,13 @@ int32_t spi_transmit_receive(SPI_HandleTypeDef *hspi, uint8_t *data_write, uint8
return TRUE; return TRUE;
} }
void ad7124_spi_init(void) /**
{ * @brief DAC161S997的SPI接口
hspi1.Instance = SPI1; *
hspi1.Init.Mode = SPI_MODE_MASTER; * DAC161S997的SPI接口SPI的模式NSS信号TI模式CRC计算和CRC多项式等参数
hspi1.Init.Direction = SPI_DIRECTION_2LINES; *
hspi1.Init.DataSize = SPI_DATASIZE_8BIT; * @return
hspi1.Init.CLKPolarity = SPI_POLARITY_HIGH; */
hspi1.Init.CLKPhase = SPI_PHASE_2EDGE;
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();
}
}
void dac161s997_spi_init(void) void dac161s997_spi_init(void)
{ {
hspi1.Instance = SPI1; hspi1.Instance = SPI1;
@ -53,33 +40,59 @@ void dac161s997_spi_init(void)
} }
} }
// void ad7124_cs_on(void) void dac161s997_cs_on(uint8_t dac_num)
// {
// HAL_GPIO_WritePin(DAC1_CS_GPIO_Port, DAC1_CS_Pin, GPIO_PIN_SET);
// HAL_GPIO_WritePin(DAC1_CS_GPIO_Port, DAC2_CS_Pin, GPIO_PIN_SET);
// HAL_GPIO_WritePin(ADC_CS_GPIO_Port, ADC_CS_Pin, GPIO_PIN_RESET);
// }
// void ad7124_cs_off(void)
// {
// HAL_GPIO_WritePin(DAC1_CS_GPIO_Port, DAC1_CS_Pin, GPIO_PIN_SET);
// HAL_GPIO_WritePin(DAC1_CS_GPIO_Port, DAC2_CS_Pin, GPIO_PIN_SET);
// HAL_GPIO_WritePin(ADC_CS_GPIO_Port, ADC_CS_Pin, GPIO_PIN_SET);
// }
void dac161s997_cs_on(chip_type_e dac_num)
{ {
switch (dac_num) switch (dac_num)
{ {
case DAC161S997_1: case DAC161S997_1:
HAL_GPIO_WritePin(DAC1_CS_GPIO_Port, DAC1_CS_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(DAC1_CS_GPIO_Port, DAC1_CS_Pin, GPIO_PIN_RESET);
// HAL_GPIO_WritePin(DAC1_CS_GPIO_Port, DAC2_CS_Pin, GPIO_PIN_SET);
// HAL_GPIO_WritePin(ADC_CS_GPIO_Port, ADC_CS_Pin, GPIO_PIN_SET);
break; break;
// case DAC161S997_2: case DAC161S997_2:
// HAL_GPIO_WritePin(DAC1_CS_GPIO_Port, DAC2_CS_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(DAC2_CS_GPIO_Port, DAC2_CS_Pin, GPIO_PIN_RESET);
// HAL_GPIO_WritePin(DAC1_CS_GPIO_Port, DAC1_CS_Pin, GPIO_PIN_SET); break;
// HAL_GPIO_WritePin(ADC_CS_GPIO_Port, ADC_CS_Pin, GPIO_PIN_SET); case DAC161S997_3:
// break; HAL_GPIO_WritePin(DAC3_CS_GPIO_Port, DAC3_CS_Pin, GPIO_PIN_RESET);
break;
case DAC161S997_4:
HAL_GPIO_WritePin(DAC4_CS_GPIO_Port, DAC4_CS_Pin, GPIO_PIN_RESET);
break;
case DAC161S997_5:
HAL_GPIO_WritePin(DAC5_CS_GPIO_Port, DAC5_CS_Pin, GPIO_PIN_RESET);
break;
case DAC161S997_6:
HAL_GPIO_WritePin(DAC6_CS_GPIO_Port, DAC6_CS_Pin, GPIO_PIN_RESET);
break;
case DAC161S997_7:
HAL_GPIO_WritePin(DAC7_CS_GPIO_Port, DAC7_CS_Pin, GPIO_PIN_RESET);
break;
case DAC161S997_8:
HAL_GPIO_WritePin(DAC8_CS_GPIO_Port, DAC8_CS_Pin, GPIO_PIN_RESET);
break;
case DAC161S997_9:
HAL_GPIO_WritePin(DAC9_CS_GPIO_Port, DAC9_CS_Pin, GPIO_PIN_RESET);
break;
case DAC161S997_10:
HAL_GPIO_WritePin(DAC10_CS_GPIO_Port, DAC10_CS_Pin, GPIO_PIN_RESET);
break;
case DAC161S997_11:
HAL_GPIO_WritePin(DAC11_CS_GPIO_Port, DAC11_CS_Pin, GPIO_PIN_RESET);
break;
case DAC161S997_12:
HAL_GPIO_WritePin(DAC12_CS_GPIO_Port, DAC12_CS_Pin, GPIO_PIN_RESET);
break;
case DAC161S997_13:
HAL_GPIO_WritePin(DAC13_CS_GPIO_Port, DAC13_CS_Pin, GPIO_PIN_RESET);
break;
case DAC161S997_14:
HAL_GPIO_WritePin(DAC14_CS_GPIO_Port, DAC14_CS_Pin, GPIO_PIN_RESET);
break;
case DAC161S997_15:
HAL_GPIO_WritePin(DAC15_CS_GPIO_Port, DAC15_CS_Pin, GPIO_PIN_RESET);
break;
case DAC161S997_16:
HAL_GPIO_WritePin(DAC16_CS_GPIO_Port, DAC16_CS_Pin, GPIO_PIN_RESET);
break;
default: default:
break; break;
} }
@ -90,71 +103,54 @@ void dac161s997_cs_off(uint8_t dac_num)
{ {
case DAC161S997_1: case DAC161S997_1:
HAL_GPIO_WritePin(DAC1_CS_GPIO_Port, DAC1_CS_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(DAC1_CS_GPIO_Port, DAC1_CS_Pin, GPIO_PIN_SET);
// HAL_GPIO_WritePin(DAC1_CS_GPIO_Port, DAC2_CS_Pin, GPIO_PIN_SET);
// HAL_GPIO_WritePin(ADC_CS_GPIO_Port, ADC_CS_Pin, GPIO_PIN_SET);
break;
// case DAC161S997_2:
// HAL_GPIO_WritePin(DAC1_CS_GPIO_Port, DAC1_CS_Pin, GPIO_PIN_SET);
// HAL_GPIO_WritePin(DAC1_CS_GPIO_Port, DAC2_CS_Pin, GPIO_PIN_SET);
// HAL_GPIO_WritePin(ADC_CS_GPIO_Port, ADC_CS_Pin, GPIO_PIN_SET);
// break;
default:
break;
}
}
void board_spi_init(chip_type_e chip_type)
{
switch (chip_type)
{
// case AD7124:
// ad7124_spi_init();
// break;
case DAC161S997_1:
dac161s997_spi_init();
break; break;
case DAC161S997_2: case DAC161S997_2:
dac161s997_spi_init(); HAL_GPIO_WritePin(DAC2_CS_GPIO_Port, DAC2_CS_Pin, GPIO_PIN_SET);
break; break;
default: case DAC161S997_3:
dac161s997_spi_init(); HAL_GPIO_WritePin(DAC3_CS_GPIO_Port, DAC3_CS_Pin, GPIO_PIN_SET);
break;
case DAC161S997_4:
HAL_GPIO_WritePin(DAC4_CS_GPIO_Port, DAC4_CS_Pin, GPIO_PIN_SET);
break;
case DAC161S997_5:
HAL_GPIO_WritePin(DAC5_CS_GPIO_Port, DAC5_CS_Pin, GPIO_PIN_SET);
break;
case DAC161S997_6:
HAL_GPIO_WritePin(DAC6_CS_GPIO_Port, DAC6_CS_Pin, GPIO_PIN_SET);
break;
case DAC161S997_7:
HAL_GPIO_WritePin(DAC7_CS_GPIO_Port, DAC7_CS_Pin, GPIO_PIN_SET);
break;
case DAC161S997_8:
HAL_GPIO_WritePin(DAC8_CS_GPIO_Port, DAC8_CS_Pin, GPIO_PIN_SET);
break;
case DAC161S997_9:
HAL_GPIO_WritePin(DAC9_CS_GPIO_Port, DAC9_CS_Pin, GPIO_PIN_SET);
break;
case DAC161S997_10:
HAL_GPIO_WritePin(DAC10_CS_GPIO_Port, DAC10_CS_Pin, GPIO_PIN_SET);
break;
case DAC161S997_11:
HAL_GPIO_WritePin(DAC11_CS_GPIO_Port, DAC11_CS_Pin, GPIO_PIN_SET);
break;
case DAC161S997_12:
HAL_GPIO_WritePin(DAC12_CS_GPIO_Port, DAC12_CS_Pin, GPIO_PIN_SET);
break;
case DAC161S997_13:
HAL_GPIO_WritePin(DAC13_CS_GPIO_Port, DAC13_CS_Pin, GPIO_PIN_SET);
break;
case DAC161S997_14:
HAL_GPIO_WritePin(DAC14_CS_GPIO_Port, DAC14_CS_Pin, GPIO_PIN_SET);
break;
case DAC161S997_15:
HAL_GPIO_WritePin(DAC15_CS_GPIO_Port, DAC15_CS_Pin, GPIO_PIN_SET);
break;
case DAC161S997_16:
HAL_GPIO_WritePin(DAC16_CS_GPIO_Port, DAC16_CS_Pin, GPIO_PIN_SET);
break; break;
}
}
void board_spi_cs_on(chip_type_e chip_type)
{
switch (chip_type)
{
// case AD7124:
// ad7124_cs_on();
// break;
case DAC161S997_1:
dac161s997_cs_on(DAC161S997_1);
break;
case DAC161S997_2:
dac161s997_cs_on(DAC161S997_2);
break;
default: default:
dac161s997_cs_on(DAC161S997_2);
break;
}
}
void board_spi_cs_off(chip_type_e chip_type)
{
switch (chip_type)
{
// case AD7124:
// ad7124_cs_off();
// break;
case DAC161S997_1:
dac161s997_cs_off(DAC161S997_1);
break;
case DAC161S997_2:
dac161s997_cs_off(DAC161S997_2);
break;
default:
dac161s997_cs_off(DAC161S997_2);
break; break;
} }
} }

View File

@ -7,23 +7,32 @@
typedef enum typedef enum
{ {
AD7124 = 0, DAC161S997_1 = 0,
DAC161S997_1 = 1, DAC161S997_2,
DAC161S997_2 = 2, DAC161S997_3,
} chip_type_e; // 芯片类型 DAC161S997_4,
DAC161S997_5,
DAC161S997_6,
DAC161S997_7,
DAC161S997_8,
DAC161S997_9,
DAC161S997_10,
DAC161S997_11,
DAC161S997_12,
DAC161S997_13,
DAC161S997_14,
DAC161S997_15,
DAC161S997_16,
DAC_MAX_NUM
} dac_num_e; // DAC编号
extern int32_t spi_transmit_receive(SPI_HandleTypeDef *hspi, uint8_t *data_write, uint8_t bytes_number); extern int32_t spi_transmit_receive(SPI_HandleTypeDef *hspi, uint8_t *data_write, uint8_t bytes_number);
// extern void board_spi_init(chip_type_e chip_type); extern void board_spi_cs_on(uint8_t chip_type);
extern void board_spi_cs_on(chip_type_e chip_type); extern void board_spi_cs_off(uint8_t chip_type);
extern void board_spi_cs_off(chip_type_e chip_type);
void dac161s997_cs_on(uint8_t dac_num); void dac161s997_cs_on(uint8_t dac_num);
void dac161s997_cs_off(uint8_t dac_num); void dac161s997_cs_off(uint8_t dac_num);
void dac161s997_spi_init(void); void dac161s997_spi_init(void);
void ad7124_cs_off(void);
void ad7124_cs_on(void);
void ad7124_spi_init(void);
#endif #endif

View File

@ -54,53 +54,83 @@ Mcu.IP8=TIM2
Mcu.IPNb=9 Mcu.IPNb=9
Mcu.Name=STM32F407Z(E-G)Tx Mcu.Name=STM32F407Z(E-G)Tx
Mcu.Package=LQFP144 Mcu.Package=LQFP144
Mcu.Pin0=PE5 Mcu.Pin0=PE2
Mcu.Pin1=PF0 Mcu.Pin1=PE3
Mcu.Pin10=PA1 Mcu.Pin10=PF6
Mcu.Pin11=PA2 Mcu.Pin11=PF8
Mcu.Pin12=PA3 Mcu.Pin12=PH0-OSC_IN
Mcu.Pin13=PA4 Mcu.Pin13=PH1-OSC_OUT
Mcu.Pin14=PA7 Mcu.Pin14=PC1
Mcu.Pin15=PC4 Mcu.Pin15=PA1
Mcu.Pin16=PC5 Mcu.Pin16=PA2
Mcu.Pin17=PF12 Mcu.Pin17=PA3
Mcu.Pin18=PF14 Mcu.Pin18=PA4
Mcu.Pin19=PE7 Mcu.Pin19=PA7
Mcu.Pin2=PF1 Mcu.Pin2=PE4
Mcu.Pin20=PE8 Mcu.Pin20=PC4
Mcu.Pin21=PE9 Mcu.Pin21=PC5
Mcu.Pin22=PE10 Mcu.Pin22=PB0
Mcu.Pin23=PB11 Mcu.Pin23=PF12
Mcu.Pin24=PB12 Mcu.Pin24=PF14
Mcu.Pin25=PB13 Mcu.Pin25=PG0
Mcu.Pin26=PD14 Mcu.Pin26=PE7
Mcu.Pin27=PD15 Mcu.Pin27=PE8
Mcu.Pin28=PG4 Mcu.Pin28=PE9
Mcu.Pin29=PA13 Mcu.Pin29=PE10
Mcu.Pin3=PF2 Mcu.Pin3=PE5
Mcu.Pin30=PA14 Mcu.Pin30=PE11
Mcu.Pin31=PD0 Mcu.Pin31=PE13
Mcu.Pin32=PD1 Mcu.Pin32=PB11
Mcu.Pin33=PD2 Mcu.Pin33=PB12
Mcu.Pin34=PD3 Mcu.Pin34=PB13
Mcu.Pin35=PD4 Mcu.Pin35=PD8
Mcu.Pin36=PD5 Mcu.Pin36=PD10
Mcu.Pin37=PD7 Mcu.Pin37=PD12
Mcu.Pin38=PG9 Mcu.Pin38=PD14
Mcu.Pin39=PB3 Mcu.Pin39=PD15
Mcu.Pin4=PF3 Mcu.Pin4=PF0
Mcu.Pin40=PB4 Mcu.Pin40=PG2
Mcu.Pin41=PB5 Mcu.Pin41=PG4
Mcu.Pin42=PB6 Mcu.Pin42=PG6
Mcu.Pin43=VP_FREERTOS_VS_CMSIS_V1 Mcu.Pin43=PA9
Mcu.Pin44=VP_LWIP_VS_Enabled Mcu.Pin44=PA11
Mcu.Pin45=VP_SYS_VS_tim4 Mcu.Pin45=PA13
Mcu.Pin5=PF4 Mcu.Pin46=PA14
Mcu.Pin6=PF5 Mcu.Pin47=PA15
Mcu.Pin7=PH0-OSC_IN Mcu.Pin48=PC11
Mcu.Pin8=PH1-OSC_OUT Mcu.Pin49=PD0
Mcu.Pin9=PC1 Mcu.Pin5=PF1
Mcu.PinsNb=46 Mcu.Pin50=PD1
Mcu.Pin51=PD2
Mcu.Pin52=PD3
Mcu.Pin53=PD4
Mcu.Pin54=PD5
Mcu.Pin55=PD6
Mcu.Pin56=PD7
Mcu.Pin57=PG9
Mcu.Pin58=PG10
Mcu.Pin59=PG11
Mcu.Pin6=PF2
Mcu.Pin60=PG12
Mcu.Pin61=PG13
Mcu.Pin62=PG14
Mcu.Pin63=PG15
Mcu.Pin64=PB3
Mcu.Pin65=PB4
Mcu.Pin66=PB5
Mcu.Pin67=PB6
Mcu.Pin68=PB7
Mcu.Pin69=PB8
Mcu.Pin7=PF3
Mcu.Pin70=PB9
Mcu.Pin71=PE0
Mcu.Pin72=PE1
Mcu.Pin73=VP_FREERTOS_VS_CMSIS_V1
Mcu.Pin74=VP_LWIP_VS_Enabled
Mcu.Pin75=VP_SYS_VS_tim4
Mcu.Pin8=PF4
Mcu.Pin9=PF5
Mcu.PinsNb=76
Mcu.ThirdPartyNb=0 Mcu.ThirdPartyNb=0
Mcu.UserConstants= Mcu.UserConstants=
Mcu.UserName=STM32F407ZGTx Mcu.UserName=STM32F407ZGTx
@ -127,10 +157,24 @@ NVIC.TimeBaseIP=TIM4
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false
PA1.Mode=RMII PA1.Mode=RMII
PA1.Signal=ETH_REF_CLK PA1.Signal=ETH_REF_CLK
PA11.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label
PA11.GPIO_Label=HART14_RTS
PA11.GPIO_PuPd=GPIO_PULLUP
PA11.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PA11.Locked=true
PA11.PinState=GPIO_PIN_SET
PA11.Signal=GPIO_Output
PA13.Mode=Serial_Wire PA13.Mode=Serial_Wire
PA13.Signal=SYS_JTMS-SWDIO PA13.Signal=SYS_JTMS-SWDIO
PA14.Mode=Serial_Wire PA14.Mode=Serial_Wire
PA14.Signal=SYS_JTCK-SWCLK PA14.Signal=SYS_JTCK-SWCLK
PA15.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label
PA15.GPIO_Label=HART12_RTS
PA15.GPIO_PuPd=GPIO_PULLUP
PA15.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PA15.Locked=true
PA15.PinState=GPIO_PIN_SET
PA15.Signal=GPIO_Output
PA2.Mode=RMII PA2.Mode=RMII
PA2.Signal=ETH_MDIO PA2.Signal=ETH_MDIO
PA3.GPIOParameters=GPIO_Speed,GPIO_Label PA3.GPIOParameters=GPIO_Speed,GPIO_Label
@ -146,6 +190,20 @@ PA4.PinState=GPIO_PIN_SET
PA4.Signal=GPIO_Output PA4.Signal=GPIO_Output
PA7.Mode=RMII PA7.Mode=RMII
PA7.Signal=ETH_CRS_DV PA7.Signal=ETH_CRS_DV
PA9.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label
PA9.GPIO_Label=HART15_RTS
PA9.GPIO_PuPd=GPIO_PULLUP
PA9.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PA9.Locked=true
PA9.PinState=GPIO_PIN_SET
PA9.Signal=GPIO_Output
PB0.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label
PB0.GPIO_Label=HART9_RTS
PB0.GPIO_PuPd=GPIO_PULLUP
PB0.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PB0.Locked=true
PB0.PinState=GPIO_PIN_SET
PB0.Signal=GPIO_Output
PB11.Mode=RMII PB11.Mode=RMII
PB11.Signal=ETH_TX_EN PB11.Signal=ETH_TX_EN
PB12.Mode=RMII PB12.Mode=RMII
@ -169,14 +227,56 @@ PB6.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PB6.Locked=true PB6.Locked=true
PB6.PinState=GPIO_PIN_SET PB6.PinState=GPIO_PIN_SET
PB6.Signal=GPIO_Output PB6.Signal=GPIO_Output
PB7.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label
PB7.GPIO_Label=DAC2_CS
PB7.GPIO_PuPd=GPIO_PULLUP
PB7.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PB7.Locked=true
PB7.PinState=GPIO_PIN_SET
PB7.Signal=GPIO_Output
PB8.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label
PB8.GPIO_Label=DAC3_CS
PB8.GPIO_PuPd=GPIO_PULLUP
PB8.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PB8.Locked=true
PB8.PinState=GPIO_PIN_SET
PB8.Signal=GPIO_Output
PB9.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label
PB9.GPIO_Label=DAC4_CS
PB9.GPIO_PuPd=GPIO_PULLUP
PB9.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PB9.Locked=true
PB9.PinState=GPIO_PIN_SET
PB9.Signal=GPIO_Output
PC1.Mode=RMII PC1.Mode=RMII
PC1.Signal=ETH_MDC PC1.Signal=ETH_MDC
PC11.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label
PC11.GPIO_Label=HART13_RTS
PC11.GPIO_PuPd=GPIO_PULLUP
PC11.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PC11.Locked=true
PC11.PinState=GPIO_PIN_SET
PC11.Signal=GPIO_Output
PC4.Mode=RMII PC4.Mode=RMII
PC4.Signal=ETH_RXD0 PC4.Signal=ETH_RXD0
PC5.Mode=RMII PC5.Mode=RMII
PC5.Signal=ETH_RXD1 PC5.Signal=ETH_RXD1
PD0.Signal=FSMC_D2_DA2 PD0.Signal=FSMC_D2_DA2
PD1.Signal=FSMC_D3_DA3 PD1.Signal=FSMC_D3_DA3
PD10.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label
PD10.GPIO_Label=HART4_RTS
PD10.GPIO_PuPd=GPIO_PULLUP
PD10.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PD10.Locked=true
PD10.PinState=GPIO_PIN_SET
PD10.Signal=GPIO_Output
PD12.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label
PD12.GPIO_Label=HART3_RTS
PD12.GPIO_PuPd=GPIO_PULLUP
PD12.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PD12.Locked=true
PD12.PinState=GPIO_PIN_SET
PD12.Signal=GPIO_Output
PD14.Signal=FSMC_D0_DA0 PD14.Signal=FSMC_D0_DA0
PD15.Signal=FSMC_D1_DA1 PD15.Signal=FSMC_D1_DA1
PD2.GPIOParameters=GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultEXTI PD2.GPIOParameters=GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultEXTI
@ -186,7 +286,7 @@ PD2.GPIO_PuPd=GPIO_PULLUP
PD2.Locked=true PD2.Locked=true
PD2.Signal=GPXTI2 PD2.Signal=GPXTI2
PD3.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label PD3.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label
PD3.GPIO_Label=CH438_1_RST PD3.GPIO_Label=CH438_RST
PD3.GPIO_PuPd=GPIO_PULLUP PD3.GPIO_PuPd=GPIO_PULLUP
PD3.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH PD3.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PD3.Locked=true PD3.Locked=true
@ -194,9 +294,72 @@ PD3.PinState=GPIO_PIN_SET
PD3.Signal=GPIO_Output PD3.Signal=GPIO_Output
PD4.Signal=FSMC_NOE PD4.Signal=FSMC_NOE
PD5.Signal=FSMC_NWE PD5.Signal=FSMC_NWE
PD6.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label
PD6.GPIO_Label=DAC10_CS
PD6.GPIO_PuPd=GPIO_PULLUP
PD6.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PD6.Locked=true
PD6.PinState=GPIO_PIN_SET
PD6.Signal=GPIO_Output
PD7.Mode=NorPsramChipSelect1_1 PD7.Mode=NorPsramChipSelect1_1
PD7.Signal=FSMC_NE1 PD7.Signal=FSMC_NE1
PD8.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label
PD8.GPIO_Label=HART5_RTS
PD8.GPIO_PuPd=GPIO_PULLUP
PD8.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PD8.Locked=true
PD8.PinState=GPIO_PIN_SET
PD8.Signal=GPIO_Output
PE0.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label
PE0.GPIO_Label=DAC5_CS
PE0.GPIO_PuPd=GPIO_PULLUP
PE0.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PE0.Locked=true
PE0.PinState=GPIO_PIN_SET
PE0.Signal=GPIO_Output
PE1.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label
PE1.GPIO_Label=DAC6_CS
PE1.GPIO_PuPd=GPIO_PULLUP
PE1.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PE1.Locked=true
PE1.PinState=GPIO_PIN_SET
PE1.Signal=GPIO_Output
PE10.Signal=FSMC_D7_DA7 PE10.Signal=FSMC_D7_DA7
PE11.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label
PE11.GPIO_Label=HART7_RTS
PE11.GPIO_PuPd=GPIO_PULLUP
PE11.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PE11.Locked=true
PE11.PinState=GPIO_PIN_SET
PE11.Signal=GPIO_Output
PE13.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label
PE13.GPIO_Label=HART6_RTS
PE13.GPIO_PuPd=GPIO_PULLUP
PE13.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PE13.Locked=true
PE13.PinState=GPIO_PIN_SET
PE13.Signal=GPIO_Output
PE2.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label
PE2.GPIO_Label=DAC7_CS
PE2.GPIO_PuPd=GPIO_PULLUP
PE2.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PE2.Locked=true
PE2.PinState=GPIO_PIN_SET
PE2.Signal=GPIO_Output
PE3.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label
PE3.GPIO_Label=DAC8_CS
PE3.GPIO_PuPd=GPIO_PULLUP
PE3.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PE3.Locked=true
PE3.PinState=GPIO_PIN_SET
PE3.Signal=GPIO_Output
PE4.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label
PE4.GPIO_Label=DAC9_CS
PE4.GPIO_PuPd=GPIO_PULLUP
PE4.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PE4.Locked=true
PE4.PinState=GPIO_PIN_SET
PE4.Signal=GPIO_Output
PE5.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label PE5.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label
PE5.GPIO_Label=PE5_LED PE5.GPIO_Label=PE5_LED
PE5.GPIO_PuPd=GPIO_PULLUP PE5.GPIO_PuPd=GPIO_PULLUP
@ -211,7 +374,7 @@ PF0.Signal=FSMC_A0
PF1.Signal=FSMC_A1 PF1.Signal=FSMC_A1
PF12.Signal=FSMC_A6 PF12.Signal=FSMC_A6
PF14.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label PF14.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label
PF14.GPIO_Label=CH438_1_AMOD PF14.GPIO_Label=CH438_AMOD
PF14.GPIO_PuPd=GPIO_PULLDOWN PF14.GPIO_PuPd=GPIO_PULLDOWN
PF14.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH PF14.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PF14.Locked=true PF14.Locked=true
@ -221,13 +384,90 @@ PF2.Signal=FSMC_A2
PF3.Signal=FSMC_A3 PF3.Signal=FSMC_A3
PF4.Signal=FSMC_A4 PF4.Signal=FSMC_A4
PF5.Signal=FSMC_A5 PF5.Signal=FSMC_A5
PF6.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label
PF6.GPIO_Label=HART11_RTS
PF6.GPIO_PuPd=GPIO_PULLUP
PF6.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PF6.Locked=true
PF6.PinState=GPIO_PIN_SET
PF6.Signal=GPIO_Output
PF8.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label
PF8.GPIO_Label=HART10_RTS
PF8.GPIO_PuPd=GPIO_PULLUP
PF8.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PF8.Locked=true
PF8.PinState=GPIO_PIN_SET
PF8.Signal=GPIO_Output
PG0.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label
PG0.GPIO_Label=HART8_RTS
PG0.GPIO_PuPd=GPIO_PULLUP
PG0.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PG0.Locked=true
PG0.PinState=GPIO_PIN_SET
PG0.Signal=GPIO_Output
PG10.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label
PG10.GPIO_Label=DAC11_CS
PG10.GPIO_PuPd=GPIO_PULLUP
PG10.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PG10.Locked=true
PG10.PinState=GPIO_PIN_SET
PG10.Signal=GPIO_Output
PG11.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label
PG11.GPIO_Label=DAC12_CS
PG11.GPIO_PuPd=GPIO_PULLUP
PG11.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PG11.Locked=true
PG11.PinState=GPIO_PIN_SET
PG11.Signal=GPIO_Output
PG12.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label
PG12.GPIO_Label=DAC13_CS
PG12.GPIO_PuPd=GPIO_PULLUP
PG12.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PG12.Locked=true
PG12.PinState=GPIO_PIN_SET
PG12.Signal=GPIO_Output
PG13.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label
PG13.GPIO_Label=DAC14_CS
PG13.GPIO_PuPd=GPIO_PULLUP
PG13.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PG13.Locked=true
PG13.PinState=GPIO_PIN_SET
PG13.Signal=GPIO_Output
PG14.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label
PG14.GPIO_Label=DAC15_CS
PG14.GPIO_PuPd=GPIO_PULLUP
PG14.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PG14.Locked=true
PG14.PinState=GPIO_PIN_SET
PG14.Signal=GPIO_Output
PG15.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label
PG15.GPIO_Label=DAC16_CS
PG15.GPIO_PuPd=GPIO_PULLUP
PG15.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PG15.Locked=true
PG15.PinState=GPIO_PIN_SET
PG15.Signal=GPIO_Output
PG2.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label
PG2.GPIO_Label=HART2_RTS
PG2.GPIO_PuPd=GPIO_PULLUP
PG2.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PG2.Locked=true
PG2.PinState=GPIO_PIN_SET
PG2.Signal=GPIO_Output
PG4.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label PG4.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label
PG4.GPIO_Label=HART1_RTS PG4.GPIO_Label=HART1_RTS
PG4.GPIO_PuPd=GPIO_PULLUP PG4.GPIO_PuPd=GPIO_PULLUP
PG4.GPIO_Speed=GPIO_SPEED_FREQ_HIGH PG4.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PG4.Locked=true PG4.Locked=true
PG4.PinState=GPIO_PIN_SET PG4.PinState=GPIO_PIN_SET
PG4.Signal=GPIO_Output PG4.Signal=GPIO_Output
PG6.GPIOParameters=GPIO_Speed,PinState,GPIO_PuPd,GPIO_Label
PG6.GPIO_Label=HART16_RTS
PG6.GPIO_PuPd=GPIO_PULLUP
PG6.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PG6.Locked=true
PG6.PinState=GPIO_PIN_SET
PG6.Signal=GPIO_Output
PG9.Mode=NorPsramChipSelect2_2 PG9.Mode=NorPsramChipSelect2_2
PG9.Signal=FSMC_NE2 PG9.Signal=FSMC_NE2
PH0-OSC_IN.Mode=HSE-External-Oscillator PH0-OSC_IN.Mode=HSE-External-Oscillator