备份,两路并口转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 */
/* 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_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_GPIO_Port GPIOA
#define HART_ALL_RST_Pin GPIO_PIN_4
#define HART_ALL_RST_GPIO_Port GPIOA
#define CH438_1_AMOD_Pin GPIO_PIN_14
#define CH438_1_AMOD_GPIO_Port GPIOF
#define HART9_RTS_Pin GPIO_PIN_0
#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_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_GPIO_Port GPIOD
#define CH438_INT_EXTI_IRQn EXTI2_IRQn
#define CH438_1_RST_Pin GPIO_PIN_3
#define CH438_1_RST_GPIO_Port GPIOD
#define CH438_RST_Pin GPIO_PIN_3
#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_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 */
#define TRUE 0

View File

@ -85,7 +85,8 @@ void vApplicationGetIdleTaskMemory(StaticTask_t **ppxIdleTaskTCBBuffer, StackTyp
* @param None
* @retval None
*/
void MX_FREERTOS_Init(void) {
void MX_FREERTOS_Init(void)
{
/* USER CODE BEGIN Init */
/* USER CODE END Init */
@ -122,7 +123,6 @@ void MX_FREERTOS_Init(void) {
/* USER CODE BEGIN RTOS_THREADS */
/* add threads, ... */
/* USER CODE END RTOS_THREADS */
}
/* USER CODE BEGIN Header_start_lwip_task */
@ -140,7 +140,7 @@ void start_lwip_task(void const * argument)
/* Infinite loop */
for (;;)
{
osDelay(10);
osThreadTerminate(NULL);
}
/* USER CODE END start_lwip_task */
}
@ -159,8 +159,12 @@ void start_dac_task(void const * argument)
dac161s997_init();
for (;;)
{
dac161s997_output(DAC161S997_1, 12.0f);
osDelay(1);
uint8_t ch = 0;
for (; ch < DAC_MAX_NUM; ch++)
{
dac161s997_output(ch, 12.0f);
}
vTaskDelay(100);
}
/* USER CODE END start_dac_task */
}
@ -180,7 +184,6 @@ void start_ch438_task(void const * argument)
for (;;)
{
uint8_t data[9] = {0xFF, 0xff, 0xff, 0xff, 0xff, 0x34, 0x56, 0x78, 0x9a};
ch438_test();
ch438_send_data(CH438_UART0, data, 9);
osDelay(1000);
}

View File

@ -51,54 +51,103 @@ void MX_GPIO_Init(void)
__HAL_RCC_GPIOC_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_GPIOD_CLK_ENABLE();
__HAL_RCC_GPIOG_CLK_ENABLE();
__HAL_RCC_GPIOD_CLK_ENABLE();
/*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 */
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 */
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 */
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 */
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 */
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 */
GPIO_InitStruct.Pin = PE5_LED_Pin;
/*Configure GPIO pin Output Level */
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.Pull = GPIO_PULLUP;
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 */
GPIO_InitStruct.Pin = HART_ALL_RST_Pin;
/*Configure GPIO pins : PFPin PFPin */
GPIO_InitStruct.Pin = HART11_RTS_Pin|HART10_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(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 */
GPIO_InitStruct.Pin = CH438_1_AMOD_Pin;
GPIO_InitStruct.Pin = CH438_AMOD_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
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 */
GPIO_InitStruct.Pin = HART1_RTS_Pin;
/*Configure GPIO pins : PGPin PGPin PGPin PGPin
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.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(HART1_RTS_GPIO_Port, &GPIO_InitStruct);
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
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 */
GPIO_InitStruct.Pin = CH438_INT_Pin;
@ -106,20 +155,6 @@ void MX_GPIO_Init(void)
GPIO_InitStruct.Pull = GPIO_PULLUP;
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*/
HAL_NVIC_SetPriority(EXTI2_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(EXTI2_IRQn);

View File

@ -149,8 +149,7 @@ void SystemClock_Config(void)
/** Initializes the CPU, AHB and APB buses clocks
*/
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
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)
{
ch438_interrupt_handler();
ch438_interrupt_handler_ch438_chip_1();
}
}
/* USER CODE END 4 */
@ -185,7 +184,8 @@ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
/* USER CODE BEGIN Callback 0 */
/* USER CODE END Callback 0 */
if (htim->Instance == TIM4) {
if (htim->Instance == TIM4)
{
HAL_IncTick();
}
/* 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,
}; /* SSR寄存器中断号对应值 */
uint8_t receive_data_buff[256];
ch438_uart_data_t ch438_uart_data[16] = {0};
uint8_t receive_data_len;
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)
{
uint8_t ch438_num = 0;
if (uart_num < 8)
{
ch438_num = CH438_CHIP0;
}
else
{
ch438_num = CH438_CHIP1;
uart_num -= 8;
}
// 设置串口通讯的格式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个字节 */
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;
uint16_t bandspeed;
dlab = ch438_read_reg(offsetadd[uart_num] | REG_LCR_ADDR, 1);
uint8_t ch438_num = 0;
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
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;
ch438_write_reg(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_DLL_ADDR, (uint8_t)bandspeed, 1);
ch438_write_reg(ch438_num, offsetadd[uart_num] | REG_DLM_ADDR, (uint8_t)(bandspeed >> 8), 1);
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,11 +98,19 @@ static void ch438_set_baudrate(uint8_t uart_num, uint32_t baudrate)
* @param data
* @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);
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);
}
}
/**
* @brief CH438的寄存器中读取数据
@ -95,25 +122,20 @@ void ch438_write_reg(uint8_t addr, uint8_t data, uint8_t size)
*
* @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;
if (ch438_num == CH438_CHIP0)
{
uint32_t *address = (uint32_t *)(0x60000000 + addr);
HAL_SRAM_Read_8b(&hsram1, address, &data, size);
return data;
}
void ch438_test(void)
else if (ch438_num == CH438_CHIP1)
{
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);
uint32_t *address = (uint32_t *)(0x64000000 + addr);
HAL_SRAM_Read_8b(&hsram2, address, &data, size);
}
return data;
}
/**
@ -127,7 +149,8 @@ void ch438_reset_all_uart(void)
{
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)
{
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)
{
ch438_write_reg(offsetadd[CH438_UART0] | REG_IER_ADDR, BIT_IER_LOWPOWER | BIT_IER_SLP, 1); // 数据手册描述SLP和LOWPOWER同时为1关闭时钟振荡器所有串口进入休眠
ch438_write_reg(CH438_CHIP0, 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)
{
ch438_tranconfig(uart_num);
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)
{
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)
{
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_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_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)
{
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++)
{
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 data_len = 0;
uint8_t *receive_data;
receive_data = data;
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--;
if (time_out == 0)
@ -225,9 +299,9 @@ uint8_t ch438_recv_data(uint8_t uart_num, uint8_t *data)
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++;
data_len++;
if (data_len == 112)
@ -238,13 +312,13 @@ uint8_t ch438_recv_data(uint8_t uart_num, uint8_t *data)
return data_len;
}
void ch438_interrupt_handler(void)
void ch438_interrupt_handler_ch438_chip_1(void)
{
uint8_t gInterruptStatus; /* 全局中断状态 */
uint8_t InterruptStatus; /* 独立串口中断状态 */
uint8_t i;
gInterruptStatus = ch438_read_reg(REG_SSR_ADDR, 1);
uint8_t ch438_num = CH438_CHIP0;
gInterruptStatus = ch438_read_reg(ch438_num, REG_SSR_ADDR, 1);
if (!gInterruptStatus)
{
@ -255,28 +329,75 @@ void ch438_interrupt_handler(void)
{
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)
{
case INT_NOINT: /* 没有中断 */
break;
case INT_THR_EMPTY: /* THR空中断 */
HART1_RTS_RECEIVE;
hart_ht1200m_rts_io_receive(i);
break;
case INT_RCV_OVERTIME: /* 接收超时中断 */
receive_data_len = ch438_recv_data(i, receive_data_buff);
ch438_send_data(i, receive_data_buff, receive_data_len);
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: /* 接收数据可用中断 */
receive_data_len = ch438_recv_data(i, receive_data_buff);
ch438_send_data(i, receive_data_buff, receive_data_len);
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(offsetadd[i] | REG_LSR_ADDR, 1);
ch438_read_reg(ch438_num, offsetadd[i] | REG_LSR_ADDR, 1);
break;
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;
default:
break;
@ -287,8 +408,13 @@ void ch438_interrupt_handler(void)
void ch438_init(void)
{
uint8_t i;
ch438_reset_all_uart();
HAL_Delay(250);
ch438_init_uart(CH438_UART0, 1200);
ch438_init_config(CH438_UART0);
for (i = 0; i < 16; i++)
{
ch438_init_uart(i, 1200);
ch438_init_config(i);
}
}

View File

@ -1,7 +1,6 @@
#ifndef __CH438Q_H__
#define __CH438Q_H__
#include "main.h"
/* CH438串口寄存器地址 */
#define REG_RBR_ADDR 0x00 /* 串口0接收缓冲寄存器地址 */
@ -119,11 +118,24 @@ typedef enum
CH438_UART5,
CH438_UART6,
CH438_UART7,
} ch438_uart_e;
void ch438_write_reg(uint8_t addr, uint8_t data, uint8_t size);
uint8_t ch438_read_reg(uint8_t addr, uint8_t size);
void ch438_test(void);
} ch438_uart_e;
typedef enum
{
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_close_uart(uint8_t uart_num);
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_send_data(uint8_t uart_num, uint8_t *data, uint16_t len);
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);
#endif

View File

@ -9,16 +9,15 @@
* @param reg
* @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};
data_buffer[0] = reg;
data_buffer[1] = data >> 8;
data_buffer[2] = data;
// board_spi_init(dac_num); // 初始化SPI因为ADC芯片也用SPI1但是时序不同
board_spi_cs_on(dac_num);
dac161s997_cs_on(dac_num);
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)
{
dac161s997_write_reg(DAC161S997_1, DAC161S997_ERR_LOW_REG, 0xFFFF);
dac161s997_write_reg(DAC161S997_1, DAC161S997_ERR_CONFIG_REG, 0x070E);
// dac161s997_write_reg(DAC161S997_2, DAC161S997_ERR_LOW_REG, 0xFFFF);
// dac161s997_write_reg(DAC161S997_2, DAC161S997_ERR_CONFIG_REG, 0x070E);
uint8_t i;
for (i = 0; i < DAC_MAX_NUM; i++)
{
dac161s997_write_reg(DAC161S997_1 + i, DAC161S997_ERR_LOW_REG, 0xFFFF);
dac161s997_write_reg(DAC161S997_1 + i, DAC161S997_ERR_CONFIG_REG, 0x070E);
}
}
/**
@ -41,15 +41,14 @@ void dac161s997_init(void)
* @param dac_num DAC芯片类型
* @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);
uint8_t data_buffer[3] = {0, 0, 0};
data_buffer[0] = DAC161S997_DACCODE_REG;
data_buffer[1] = dac_code >> 8;
data_buffer[2] = dac_code;
// board_spi_init(dac_num); // 初始化SPI因为ADC芯片也用SPI1但是时序不同
board_spi_cs_on(dac_num);
dac161s997_cs_on(dac_num);
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"
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)
{
uint8_t i = 0;
HART_RESET_ON;
HAL_Delay(10);
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_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_SEND HAL_GPIO_WritePin(HART2_RTS_GPIO_Port, HART2_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_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_rts_io_send(uint8_t channel);
extern void hart_ht1200m_rts_io_receive(uint8_t channel);
#endif

View File

@ -13,26 +13,13 @@ int32_t spi_transmit_receive(SPI_HandleTypeDef *hspi, uint8_t *data_write, uint8
return TRUE;
}
void ad7124_spi_init(void)
{
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_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();
}
}
/**
* @brief DAC161S997的SPI接口
*
* DAC161S997的SPI接口SPI的模式NSS信号TI模式CRC计算和CRC多项式等参数
*
* @return
*/
void dac161s997_spi_init(void)
{
hspi1.Instance = SPI1;
@ -53,33 +40,59 @@ void dac161s997_spi_init(void)
}
}
// void ad7124_cs_on(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_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)
void dac161s997_cs_on(uint8_t dac_num)
{
switch (dac_num)
{
case DAC161S997_1:
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;
// case DAC161S997_2:
// HAL_GPIO_WritePin(DAC1_CS_GPIO_Port, DAC2_CS_Pin, GPIO_PIN_RESET);
// HAL_GPIO_WritePin(DAC1_CS_GPIO_Port, DAC1_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(DAC2_CS_GPIO_Port, DAC2_CS_Pin, GPIO_PIN_RESET);
break;
case DAC161S997_3:
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:
break;
}
@ -90,71 +103,54 @@ void dac161s997_cs_off(uint8_t dac_num)
{
case DAC161S997_1:
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;
case DAC161S997_2:
dac161s997_spi_init();
HAL_GPIO_WritePin(DAC2_CS_GPIO_Port, DAC2_CS_Pin, GPIO_PIN_SET);
break;
default:
dac161s997_spi_init();
case DAC161S997_3:
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;
}
}
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:
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;
}
}

View File

@ -7,23 +7,32 @@
typedef enum
{
AD7124 = 0,
DAC161S997_1 = 1,
DAC161S997_2 = 2,
} chip_type_e; // 芯片类型
DAC161S997_1 = 0,
DAC161S997_2,
DAC161S997_3,
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 void board_spi_init(chip_type_e chip_type);
extern void board_spi_cs_on(chip_type_e chip_type);
extern void board_spi_cs_off(chip_type_e chip_type);
extern void board_spi_cs_on(uint8_t chip_type);
extern void board_spi_cs_off(uint8_t chip_type);
void dac161s997_cs_on(uint8_t dac_num);
void dac161s997_cs_off(uint8_t dac_num);
void dac161s997_spi_init(void);
void ad7124_cs_off(void);
void ad7124_cs_on(void);
void ad7124_spi_init(void);
#endif

View File

@ -54,53 +54,83 @@ Mcu.IP8=TIM2
Mcu.IPNb=9
Mcu.Name=STM32F407Z(E-G)Tx
Mcu.Package=LQFP144
Mcu.Pin0=PE5
Mcu.Pin1=PF0
Mcu.Pin10=PA1
Mcu.Pin11=PA2
Mcu.Pin12=PA3
Mcu.Pin13=PA4
Mcu.Pin14=PA7
Mcu.Pin15=PC4
Mcu.Pin16=PC5
Mcu.Pin17=PF12
Mcu.Pin18=PF14
Mcu.Pin19=PE7
Mcu.Pin2=PF1
Mcu.Pin20=PE8
Mcu.Pin21=PE9
Mcu.Pin22=PE10
Mcu.Pin23=PB11
Mcu.Pin24=PB12
Mcu.Pin25=PB13
Mcu.Pin26=PD14
Mcu.Pin27=PD15
Mcu.Pin28=PG4
Mcu.Pin29=PA13
Mcu.Pin3=PF2
Mcu.Pin30=PA14
Mcu.Pin31=PD0
Mcu.Pin32=PD1
Mcu.Pin33=PD2
Mcu.Pin34=PD3
Mcu.Pin35=PD4
Mcu.Pin36=PD5
Mcu.Pin37=PD7
Mcu.Pin38=PG9
Mcu.Pin39=PB3
Mcu.Pin4=PF3
Mcu.Pin40=PB4
Mcu.Pin41=PB5
Mcu.Pin42=PB6
Mcu.Pin43=VP_FREERTOS_VS_CMSIS_V1
Mcu.Pin44=VP_LWIP_VS_Enabled
Mcu.Pin45=VP_SYS_VS_tim4
Mcu.Pin5=PF4
Mcu.Pin6=PF5
Mcu.Pin7=PH0-OSC_IN
Mcu.Pin8=PH1-OSC_OUT
Mcu.Pin9=PC1
Mcu.PinsNb=46
Mcu.Pin0=PE2
Mcu.Pin1=PE3
Mcu.Pin10=PF6
Mcu.Pin11=PF8
Mcu.Pin12=PH0-OSC_IN
Mcu.Pin13=PH1-OSC_OUT
Mcu.Pin14=PC1
Mcu.Pin15=PA1
Mcu.Pin16=PA2
Mcu.Pin17=PA3
Mcu.Pin18=PA4
Mcu.Pin19=PA7
Mcu.Pin2=PE4
Mcu.Pin20=PC4
Mcu.Pin21=PC5
Mcu.Pin22=PB0
Mcu.Pin23=PF12
Mcu.Pin24=PF14
Mcu.Pin25=PG0
Mcu.Pin26=PE7
Mcu.Pin27=PE8
Mcu.Pin28=PE9
Mcu.Pin29=PE10
Mcu.Pin3=PE5
Mcu.Pin30=PE11
Mcu.Pin31=PE13
Mcu.Pin32=PB11
Mcu.Pin33=PB12
Mcu.Pin34=PB13
Mcu.Pin35=PD8
Mcu.Pin36=PD10
Mcu.Pin37=PD12
Mcu.Pin38=PD14
Mcu.Pin39=PD15
Mcu.Pin4=PF0
Mcu.Pin40=PG2
Mcu.Pin41=PG4
Mcu.Pin42=PG6
Mcu.Pin43=PA9
Mcu.Pin44=PA11
Mcu.Pin45=PA13
Mcu.Pin46=PA14
Mcu.Pin47=PA15
Mcu.Pin48=PC11
Mcu.Pin49=PD0
Mcu.Pin5=PF1
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.UserConstants=
Mcu.UserName=STM32F407ZGTx
@ -127,10 +157,24 @@ NVIC.TimeBaseIP=TIM4
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false
PA1.Mode=RMII
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.Signal=SYS_JTMS-SWDIO
PA14.Mode=Serial_Wire
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.Signal=ETH_MDIO
PA3.GPIOParameters=GPIO_Speed,GPIO_Label
@ -146,6 +190,20 @@ PA4.PinState=GPIO_PIN_SET
PA4.Signal=GPIO_Output
PA7.Mode=RMII
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.Signal=ETH_TX_EN
PB12.Mode=RMII
@ -169,14 +227,56 @@ PB6.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PB6.Locked=true
PB6.PinState=GPIO_PIN_SET
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.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.Signal=ETH_RXD0
PC5.Mode=RMII
PC5.Signal=ETH_RXD1
PD0.Signal=FSMC_D2_DA2
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
PD15.Signal=FSMC_D1_DA1
PD2.GPIOParameters=GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultEXTI
@ -186,7 +286,7 @@ PD2.GPIO_PuPd=GPIO_PULLUP
PD2.Locked=true
PD2.Signal=GPXTI2
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_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PD3.Locked=true
@ -194,9 +294,72 @@ PD3.PinState=GPIO_PIN_SET
PD3.Signal=GPIO_Output
PD4.Signal=FSMC_NOE
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.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
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.GPIO_Label=PE5_LED
PE5.GPIO_PuPd=GPIO_PULLUP
@ -211,7 +374,7 @@ PF0.Signal=FSMC_A0
PF1.Signal=FSMC_A1
PF12.Signal=FSMC_A6
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_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PF14.Locked=true
@ -221,13 +384,90 @@ PF2.Signal=FSMC_A2
PF3.Signal=FSMC_A3
PF4.Signal=FSMC_A4
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.GPIO_Label=HART1_RTS
PG4.GPIO_PuPd=GPIO_PULLUP
PG4.GPIO_Speed=GPIO_SPEED_FREQ_HIGH
PG4.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
PG4.Locked=true
PG4.PinState=GPIO_PIN_SET
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.Signal=FSMC_NE2
PH0-OSC_IN.Mode=HSE-External-Oscillator