diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml
index f0a485f..c2a6735 100644
--- a/.settings/language.settings.xml
+++ b/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
@@ -16,7 +16,7 @@
-
+
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 5633a45..1168262 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -94,7 +94,8 @@
"api.h": "c",
"sys.h": "c",
"reg_manager.h": "c",
- "fpga_if.h": "c"
+ "fpga_if.h": "c",
+ "rng.h": "c"
},
"files.autoGuessEncoding": false,
"files.encoding": "gbk"
diff --git a/Core/Inc/spi.h b/Core/Inc/spi.h
index 6a5279d..43636ac 100644
--- a/Core/Inc/spi.h
+++ b/Core/Inc/spi.h
@@ -34,11 +34,14 @@ extern "C" {
extern SPI_HandleTypeDef hspi1;
+extern SPI_HandleTypeDef hspi2;
+
/* USER CODE BEGIN Private defines */
/* USER CODE END Private defines */
void MX_SPI1_Init(void);
+void MX_SPI2_Init(void);
/* USER CODE BEGIN Prototypes */
diff --git a/Core/Src/gpio.c b/Core/Src/gpio.c
index b62bd30..ab678ea 100644
--- a/Core/Src/gpio.c
+++ b/Core/Src/gpio.c
@@ -70,31 +70,29 @@ void MX_GPIO_Init(void)
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
/*Configure GPIO pins : PC13 PC14 PC15 PC0
- PC2 PC3 PC6 PC7
- PC8 PC9 PC10 PC11
- PC12 */
+ PC6 PC7 PC8 PC9
+ PC10 PC11 PC12 */
GPIO_InitStruct.Pin = GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15|GPIO_PIN_0
- |GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_6|GPIO_PIN_7
- |GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11
- |GPIO_PIN_12;
+ |GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9
+ |GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
- /*Configure GPIO pins : PA0 PA3 PA4 PA8
- PA11 PA12 PA15 */
- GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_8
- |GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_15;
+ /*Configure GPIO pins : PA0 PA3 PA8 PA11
+ PA12 PA15 */
+ GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_3|GPIO_PIN_8|GPIO_PIN_11
+ |GPIO_PIN_12|GPIO_PIN_15;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
- /*Configure GPIO pins : PB0 PB1 PB2 PB10
- PB14 PB15 PB3 PB4
- PB6 PB7 PB8 PB9 */
- GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_10
- |GPIO_PIN_14|GPIO_PIN_15|GPIO_PIN_3|GPIO_PIN_4
- |GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9;
+ /*Configure GPIO pins : PB0 PB1 PB2 PB14
+ PB15 PB3 PB4 PB6
+ PB7 PB8 */
+ GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_14
+ |GPIO_PIN_15|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_6
+ |GPIO_PIN_7|GPIO_PIN_8;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
diff --git a/Core/Src/main.c b/Core/Src/main.c
index 463d664..1917bf5 100644
--- a/Core/Src/main.c
+++ b/Core/Src/main.c
@@ -102,6 +102,7 @@ int main(void)
MX_TIM6_Init();
MX_TIM1_Init();
MX_SPI1_Init();
+ MX_SPI2_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
diff --git a/Core/Src/spi.c b/Core/Src/spi.c
index b594ae8..5295e89 100644
--- a/Core/Src/spi.c
+++ b/Core/Src/spi.c
@@ -25,6 +25,7 @@
/* USER CODE END 0 */
SPI_HandleTypeDef hspi1;
+SPI_HandleTypeDef hspi2;
/* SPI1 init function */
void MX_SPI1_Init(void)
@@ -41,11 +42,11 @@ void MX_SPI1_Init(void)
hspi1.Init.Mode = SPI_MODE_MASTER;
hspi1.Init.Direction = SPI_DIRECTION_2LINES;
hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
- hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
- hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
- hspi1.Init.NSS = SPI_NSS_SOFT;
- hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
- hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
+ hspi1.Init.CLKPolarity = SPI_POLARITY_HIGH;
+ hspi1.Init.CLKPhase = SPI_PHASE_2EDGE;
+ hspi1.Init.NSS = SPI_NSS_HARD_OUTPUT;
+ hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_4;
+ hspi1.Init.FirstBit = SPI_FIRSTBIT_LSB;
hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
hspi1.Init.CRCPolynomial = 10;
@@ -58,6 +59,38 @@ void MX_SPI1_Init(void)
/* USER CODE END SPI1_Init 2 */
}
+/* SPI2 init function */
+void MX_SPI2_Init(void)
+{
+
+ /* USER CODE BEGIN SPI2_Init 0 */
+
+ /* USER CODE END SPI2_Init 0 */
+
+ /* USER CODE BEGIN SPI2_Init 1 */
+
+ /* USER CODE END SPI2_Init 1 */
+ hspi2.Instance = SPI2;
+ hspi2.Init.Mode = SPI_MODE_MASTER;
+ hspi2.Init.Direction = SPI_DIRECTION_2LINES;
+ hspi2.Init.DataSize = SPI_DATASIZE_8BIT;
+ hspi2.Init.CLKPolarity = SPI_POLARITY_HIGH;
+ hspi2.Init.CLKPhase = SPI_PHASE_2EDGE;
+ hspi2.Init.NSS = SPI_NSS_HARD_OUTPUT;
+ hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
+ hspi2.Init.FirstBit = SPI_FIRSTBIT_LSB;
+ hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
+ hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
+ hspi2.Init.CRCPolynomial = 10;
+ if (HAL_SPI_Init(&hspi2) != HAL_OK)
+ {
+ Error_Handler();
+ }
+ /* USER CODE BEGIN SPI2_Init 2 */
+
+ /* USER CODE END SPI2_Init 2 */
+
+}
void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle)
{
@@ -74,11 +107,12 @@ void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle)
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
/**SPI1 GPIO Configuration
+ PA4 ------> SPI1_NSS
PA5 ------> SPI1_SCK
PA6 ------> SPI1_MISO
PB5 ------> SPI1_MOSI
*/
- GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6;
+ GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
@@ -96,6 +130,40 @@ void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle)
/* USER CODE END SPI1_MspInit 1 */
}
+ else if(spiHandle->Instance==SPI2)
+ {
+ /* USER CODE BEGIN SPI2_MspInit 0 */
+
+ /* USER CODE END SPI2_MspInit 0 */
+ /* SPI2 clock enable */
+ __HAL_RCC_SPI2_CLK_ENABLE();
+
+ __HAL_RCC_GPIOC_CLK_ENABLE();
+ __HAL_RCC_GPIOB_CLK_ENABLE();
+ /**SPI2 GPIO Configuration
+ PC2 ------> SPI2_MISO
+ PC3 ------> SPI2_MOSI
+ PB10 ------> SPI2_SCK
+ PB9 ------> SPI2_NSS
+ */
+ GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+ GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
+ HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
+
+ GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_9;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+ GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
+ HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
+
+ /* USER CODE BEGIN SPI2_MspInit 1 */
+
+ /* USER CODE END SPI2_MspInit 1 */
+ }
}
void HAL_SPI_MspDeInit(SPI_HandleTypeDef* spiHandle)
@@ -110,11 +178,12 @@ void HAL_SPI_MspDeInit(SPI_HandleTypeDef* spiHandle)
__HAL_RCC_SPI1_CLK_DISABLE();
/**SPI1 GPIO Configuration
+ PA4 ------> SPI1_NSS
PA5 ------> SPI1_SCK
PA6 ------> SPI1_MISO
PB5 ------> SPI1_MOSI
*/
- HAL_GPIO_DeInit(GPIOA, GPIO_PIN_5|GPIO_PIN_6);
+ HAL_GPIO_DeInit(GPIOA, GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6);
HAL_GPIO_DeInit(GPIOB, GPIO_PIN_5);
@@ -122,6 +191,28 @@ void HAL_SPI_MspDeInit(SPI_HandleTypeDef* spiHandle)
/* USER CODE END SPI1_MspDeInit 1 */
}
+ else if(spiHandle->Instance==SPI2)
+ {
+ /* USER CODE BEGIN SPI2_MspDeInit 0 */
+
+ /* USER CODE END SPI2_MspDeInit 0 */
+ /* Peripheral clock disable */
+ __HAL_RCC_SPI2_CLK_DISABLE();
+
+ /**SPI2 GPIO Configuration
+ PC2 ------> SPI2_MISO
+ PC3 ------> SPI2_MOSI
+ PB10 ------> SPI2_SCK
+ PB9 ------> SPI2_NSS
+ */
+ HAL_GPIO_DeInit(GPIOC, GPIO_PIN_2|GPIO_PIN_3);
+
+ HAL_GPIO_DeInit(GPIOB, GPIO_PIN_10|GPIO_PIN_9);
+
+ /* USER CODE BEGIN SPI2_MspDeInit 1 */
+
+ /* USER CODE END SPI2_MspDeInit 1 */
+ }
}
/* USER CODE BEGIN 1 */
diff --git a/LWIP/Target/ethernetif.c b/LWIP/Target/ethernetif.c
index 74ce85f..f9a2c5f 100644
--- a/LWIP/Target/ethernetif.c
+++ b/LWIP/Target/ethernetif.c
@@ -196,7 +196,7 @@ static void low_level_init(struct netif *netif)
MACAddr[2] = 0xE1;
MACAddr[3] = 0x00;
MACAddr[4] = 0x00;
- MACAddr[5] = 0x00;
+ MACAddr[5] = 0x01;
heth.Init.MACAddr = &MACAddr[0];
heth.Init.MediaInterface = HAL_ETH_RMII_MODE;
heth.Init.TxDesc = DMATxDscrTab;
diff --git a/README.md b/README.md
index d521fb1..9609bef 100644
--- a/README.md
+++ b/README.md
@@ -1,38 +1,3 @@
```
-基础组件
--------------------------
-1. 微秒定时器
-2. 网络端口
-3. 日志接口
-5. GPIO初始化中断处理
-6. 网络消息解析处理
-7. SPI读写
-8. 线程
-9. 按键检测
--------------------------
-
--------------------------
-凌云光项目之间共享基础组件
--------------------------
-
-线程划分
-1. UDP接收消息和消息解析。
-2. 主线程循环点亮LED。
-3. 按键监听线程,按住回复出厂设置按键,重启设备,设备恢复出厂设置。
-```
-
-
-```
-开发任务:
-1. 支持flash存储
-2. 支持按键恢复出厂设置
-3. 支持自动生成MAC地址并保存
-4. 支持PC指令
- 1. PING指令
- 2. 配置寄存器指令
- 3. 读取寄存器指令
- 4. 支持重新生成MAC地址指令
- 5. flush_flash
-5. 读取写入寄存器
-```
-
+ref:https://iflytop1.feishu.cn/docx/FPqjdaTtkoBeU9x4qbjcD6vxnUc
+```
\ No newline at end of file
diff --git a/iflytop_xsync/xs_udp.c b/iflytop_xsync/xs_udp.c
index c3ab8dd..ed77fa9 100644
--- a/iflytop_xsync/xs_udp.c
+++ b/iflytop_xsync/xs_udp.c
@@ -1,5 +1,5 @@
#include "xs_udp.h"
-
+#include "xs_log.h"
#define TAG "xs_udp"
#define UDP_DEFAULT_SEND_PORT 5000
@@ -25,7 +25,7 @@ static void udp_server_receive_thread(void const *argument) { //
}
}
-bool udp_init(udp_t *udp_handler, uint16_t port, udp_on_packet_t on_packet, void *data) {
+bool xs_udp_init(udp_t *udp_handler, uint16_t port, udp_on_packet_t on_packet, void *data) {
memset(udp_handler, 0, sizeof(udp_t));
udp_handler->server.sin_family = AF_INET;
udp_handler->server.sin_addr.s_addr = inet_addr("0.0.0.0");
@@ -53,18 +53,18 @@ bool udp_init(udp_t *udp_handler, uint16_t port, udp_on_packet_t on_packet, void
}
}
-int udp_send_message(udp_t *udp_handler, const char *ip, int port, const char *data, int len) { //
+int xs_udp_send_message(udp_t *udp_handler, const char *ip, int port, const char *data, int len) { //
struct sockaddr_in sockaddr;
sockaddr.sin_family = AF_INET;
sockaddr.sin_addr.s_addr = inet_addr(ip);
sockaddr.sin_port = htons(port);
return sendto(udp_handler->sock_fd, data, len, 0, (struct sockaddr *)&sockaddr, sizeof(sockaddr));
}
-int udp_send_message2(udp_t *udp_handler, struct sockaddr_in *add, const char *data, int len) { //
+int xs_udp_send_message2(udp_t *udp_handler, struct sockaddr_in *add, const char *data, int len) { //
return sendto(udp_handler->sock_fd, data, len, 0, (struct sockaddr *)add, sizeof(struct sockaddr_in));
}
-bool udp_broadcast_init(udp_broadcast_handler_t *udp_handler, uint16_t localport) {
+bool xs_udp_broadcast_init(udp_broadcast_handler_t *udp_handler, uint16_t localport) {
memset(udp_handler, 0, sizeof(udp_broadcast_handler_t));
udp_handler->server.sin_family = AF_INET;
udp_handler->server.sin_addr.s_addr = inet_addr("0.0.0.0");
@@ -83,7 +83,7 @@ bool udp_broadcast_init(udp_broadcast_handler_t *udp_handler, uint16_t localport
SOCKET_DO(bind(udp_handler->sock_fd, (struct sockaddr *)&udp_handler->server, sizeof(udp_handler->server)));
return true;
}
-bool udp_broadcast(udp_broadcast_handler_t *handler, uint32_t remoteport, uint8_t *data, size_t datalen) {
+bool xs_udp_broadcast(udp_broadcast_handler_t *handler, uint32_t remoteport, uint8_t *data, size_t datalen) {
struct sockaddr_in sockaddr;
sockaddr.sin_family = AF_INET;
sockaddr.sin_addr.s_addr = htonl(INADDR_BROADCAST);
diff --git a/iflytop_xsync/xs_udp.h b/iflytop_xsync/xs_udp.h
index 76e637b..983b418 100644
--- a/iflytop_xsync/xs_udp.h
+++ b/iflytop_xsync/xs_udp.h
@@ -27,12 +27,12 @@ typedef struct {
int sock_fd;
} udp_broadcast_handler_t;
-bool udp_init(udp_t *udp_handler, uint16_t port, udp_on_packet_t on_packet, void *data);
-int udp_send_message(udp_t *udp_handler, const char *remoteip, int remoteport, const char *data, int len);
-int udp_send_message2(udp_t *udp_handler, struct sockaddr_in *add, const char *data, int len);
+bool xs_udp_init(udp_t *udp_handler, uint16_t port, udp_on_packet_t on_packet, void *data);
+int xs_udp_send_message(udp_t *udp_handler, const char *remoteip, int remoteport, const char *data, int len);
+int xs_udp_send_message2(udp_t *udp_handler, struct sockaddr_in *add, const char *data, int len);
-bool udp_broadcast_init(udp_broadcast_handler_t *handler, uint16_t localport);
-bool udp_broadcast(udp_broadcast_handler_t *handler, uint32_t remoteport, uint8_t *data, size_t datalen);
+bool xs_udp_broadcast_init(udp_broadcast_handler_t *handler, uint16_t localport);
+bool xs_udp_broadcast(udp_broadcast_handler_t *handler, uint32_t remoteport, uint8_t *data, size_t datalen);
#ifdef __cplusplus
}
diff --git a/usrc/base_service/fpga_if.c b/usrc/base_service/fpga_if.c
index 3f4392b..fa5a0ac 100644
--- a/usrc/base_service/fpga_if.c
+++ b/usrc/base_service/fpga_if.c
@@ -4,10 +4,12 @@
* @brief fpga_if初始化
*/
-fpga_if_t fpga_if;
-void fpga_if_init() { //
- fpga_if.spi = &hspi1;
-
+static fpga_if_t fpga_if;
+void fpga_if_init() { //
+ fpga_if.spi1 = &hspi1;
+ fpga_if.spi2 = &hspi2;
+ // xs_gpio_init_as_output(PA)
+#if 0
xs_gpio_init_as_input(&fpga_if.camera_sync_code_irq_io, fpga_if.camera_sync_code_irq_pin, kxs_gpio_pulldown, kxs_gpio_rising_irq, false);
xs_gpio_init_as_input(&fpga_if.timecode_irq_io, fpga_if.timecode_irq_pin, kxs_gpio_pulldown, kxs_gpio_rising_irq, false);
@@ -17,6 +19,7 @@ void fpga_if_init() { //
for (size_t i = 0; i < 8; i++) {
xs_gpio_init_as_input(&fpga_if.timecode_data[i], fpga_if.timecode_data_pin[i], kxs_gpio_nopull, kxs_gpio_no_irq, false);
}
+#endif
}
/**
* @brief 读取当前timecode
@@ -25,7 +28,7 @@ void fpga_if_init() { //
* @param timecode1
*/
-uint8_t fpga_if_get_timecode_u8(uint8_t add) {
+static uint8_t _fpga_if_get_timecode_u8(uint8_t add) {
xs_gpio_write(&fpga_if.timecode_add[0], add & 0x01);
xs_gpio_write(&fpga_if.timecode_add[1], add & 0x02);
xs_gpio_write(&fpga_if.timecode_add[2], add & 0x04);
@@ -39,6 +42,9 @@ uint8_t fpga_if_get_timecode_u8(uint8_t add) {
return data;
}
void fpga_if_get_timecode(uint32_t *timecode0, uint32_t *timecode1) {
+ *timecode0 = 1;
+ *timecode1 = 2;
+#if 0
*timecode0 = 0;
*timecode1 = 0;
@@ -49,9 +55,10 @@ void fpga_if_get_timecode(uint32_t *timecode0, uint32_t *timecode1) {
*timecode1 |= fpga_if_get_timecode_u8(4) << 0;
*timecode1 |= fpga_if_get_timecode_u8(5) << 8;
-
+#endif
return;
}
+
/**
* @brief SPI寄存器写指令
*
@@ -59,7 +66,7 @@ void fpga_if_get_timecode(uint32_t *timecode0, uint32_t *timecode1) {
* @param txdata
* @param rxdata
*/
-void fpga_if_spi_write_data(uint32_t add, uint32_t txdata, uint32_t *rxdata) {
+static void _fpga_if_spi_write_data(SPI_HandleTypeDef *hspi, uint32_t add, uint32_t txdata, uint32_t *rxdata) {
uint8_t txbuf[2 + 4] = {0};
txbuf[0] = add & 0xFF;
txbuf[1] = (add >> 8) & 0xFF;
@@ -69,11 +76,7 @@ void fpga_if_spi_write_data(uint32_t add, uint32_t txdata, uint32_t *rxdata) {
txbuf[4] = (txdata >> 16) & 0xFF;
txbuf[5] = (txdata >> 24) & 0xFF;
- xs_gpio_write(&fpga_if.cs_gpio, 0); // cs_gpio
- xs_delay_us(1);
- HAL_SPI_TransmitReceive(fpga_if.spi, txbuf, txbuf, 2 + 4, 1000);
- xs_gpio_write(&fpga_if.cs_gpio, 1); // cs_gpio
-
+ HAL_SPI_TransmitReceive(hspi, txbuf, txbuf, 2 + 4, 1000);
*rxdata = txbuf[2] | (txbuf[3] << 8) | (txbuf[4] << 16) | (txbuf[5] << 24);
}
/**
@@ -82,7 +85,7 @@ void fpga_if_spi_write_data(uint32_t add, uint32_t txdata, uint32_t *rxdata) {
* @param add
* @param rxdata
*/
-void fpga_if_spi_read_data(uint32_t add, uint32_t *rxdata) {
+static void _fpga_if_spi_read_data(SPI_HandleTypeDef *hspi, uint32_t add, uint32_t *rxdata) {
uint8_t txbuf[2 + 4] = {0};
txbuf[0] = add & 0xFF;
txbuf[1] = (add >> 8) & 0xFF;
@@ -90,13 +93,14 @@ void fpga_if_spi_read_data(uint32_t add, uint32_t *rxdata) {
txbuf[3] = 0;
txbuf[4] = 0;
txbuf[5] = 0;
-
- xs_gpio_write(&fpga_if.cs_gpio, 0); // cs_gpio
- xs_delay_us(1);
- HAL_SPI_TransmitReceive(fpga_if.spi, txbuf, txbuf, 2 + 4, 1000);
- xs_gpio_write(&fpga_if.cs_gpio, 1); // cs_gpio
-
+ HAL_SPI_TransmitReceive(hspi, txbuf, txbuf, 2 + 4, 1000);
*rxdata = txbuf[2] | (txbuf[3] << 8) | (txbuf[4] << 16) | (txbuf[5] << 24);
}
+void fpga_if_spi_write_data_01(uint32_t add, uint32_t txdata, uint32_t *rxdata) { _fpga_if_spi_write_data(fpga_if.spi1, add, txdata, rxdata); }
+void fpga_if_spi_read_data_01(uint32_t add, uint32_t *rxdata) { _fpga_if_spi_read_data(fpga_if.spi1, add, rxdata); }
+
+void fpga_if_spi_write_data_02(uint32_t add, uint32_t txdata, uint32_t *rxdata) { _fpga_if_spi_write_data(fpga_if.spi2, add, txdata, rxdata); }
+void fpga_if_spi_read_data_02(uint32_t add, uint32_t *rxdata) { _fpga_if_spi_read_data(fpga_if.spi2, add, rxdata); }
+
fpga_if_t *fpga_if_get_instance() { return &fpga_if; }
diff --git a/usrc/base_service/fpga_if.h b/usrc/base_service/fpga_if.h
index 3648b76..b03149f 100644
--- a/usrc/base_service/fpga_if.h
+++ b/usrc/base_service/fpga_if.h
@@ -2,14 +2,17 @@
#include
#include "project_dep.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
typedef struct {
/**
* @brief 指令SPI 接口
*/
- SPI_HandleTypeDef *spi;
- xs_gpio_t cs_gpio;
- Pin_t cs_pin;
+ SPI_HandleTypeDef *spi1;
+ SPI_HandleTypeDef *spi2;
/**
* @brief timecode并口
@@ -41,19 +44,39 @@ void fpga_if_init();
*/
void fpga_if_get_timecode(uint32_t *timecode0, uint32_t *timecode1);
/**
- * @brief SPI寄存器写指令
+ * @brief SPI寄存器写指令_01 FPGA寄存器读写SPI
+ *
+ * @param add
+ * @param txdata
+ * @param rxdata
+ */
+void fpga_if_spi_write_data_01(uint32_t add, uint32_t txdata, uint32_t *rxdata);
+/**
+ * @brief SPI寄存器读指令 FPGA寄存器读写SPI
+ *
+ * @param add
+ * @param rxdata
+ */
+void fpga_if_spi_read_data_01(uint32_t add, uint32_t *rxdata);
+
+/**
+ * @brief SPI寄存器写指令 FPGA备用SPI
*
* @param add
* @param txdata
* @param rxdata
*/
-void fpga_if_spi_write_data(uint32_t add, uint32_t txdata, uint32_t *rxdata);
+void fpga_if_spi_write_data_02(uint32_t add, uint32_t txdata, uint32_t *rxdata);
/**
- * @brief SPI寄存器读指令
+ * @brief SPI寄存器读指令 FPGA备用SPI
*
* @param add
* @param rxdata
*/
-void fpga_if_spi_read_data(uint32_t add, uint32_t *rxdata);
+void fpga_if_spi_read_data_02(uint32_t add, uint32_t *rxdata);
+
+fpga_if_t *fpga_if_get_instance();
-fpga_if_t *fpga_if_get_instance();
\ No newline at end of file
+#ifdef __cplusplus
+}
+#endif
\ No newline at end of file
diff --git a/usrc/main.cpp b/usrc/main.cpp
index c2c2614..a74dcc1 100644
--- a/usrc/main.cpp
+++ b/usrc/main.cpp
@@ -3,7 +3,12 @@
//
#include "base_service/base_service.h"
+#include "base_service/fpga_if.h"
+#include "service/device_info.hpp"
+#include "service/extern_if_service.h"
#include "service/network_service.h"
+#include "service/reg_manager.h"
+#include "service/report_generator_service.h"
//
#define TAG "main"
using namespace std;
@@ -11,15 +16,31 @@ using namespace std;
extern void umain();
extern "C" {
extern void MX_LWIP_Init(void);
-void StartDefaultTask(void const* argument) {
- umain();
-}
+void StartDefaultTask(void const* argument) { umain(); }
}
/*******************************************************************************
* MAIN *
*******************************************************************************/
+/**
+ * @brief
+ * | extern_if_service |
+ * ========================================
+ * | reg_manager |
+ * config_service ========================================
+ * | report_generator | device_info |
+ * =================== ==============
+ * | fpage_if |
+ * ========================================
+ *
+ */
+
xs_gpio_t m_debug_led;
+extern "C" {
+void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {
+ report_generator_service_irq_trigger(GPIO_Pin);
+}
+}
void umain() {
XS_LOGI(TAG, "%s:%s", PC_PROJECT_NAME, PC_VERSION);
@@ -35,10 +56,27 @@ void umain() {
* @brief 初始化网络服务
*/
network_service_init();
-
/**
- * @brief
+ * @brief fpga_interface init
+ */
+ fpga_if_init();
+ /**
+ * @brief report_generator init
*/
+ report_generator_service_init(fpga_if_get_instance()->timecode_irq_pin, fpga_if_get_instance()->camera_sync_code_irq_pin);
+ /**
+ * @brief device_info init
+ */
+ device_info_init();
+ /**
+ * @brief reg_manager init
+ */
+ reg_manager_init();
+ /**
+ * @brief extern_if_service init
+ */
+ extern_if_service_init();
+
while (true) {
xs_gpio_write(&m_debug_led, true);
xs_delay_ms(100);
diff --git a/usrc/service/device.cpp b/usrc/service/device.cpp
deleted file mode 100644
index 238b856..0000000
--- a/usrc/service/device.cpp
+++ /dev/null
@@ -1,32 +0,0 @@
-#include "device.hpp"
-
-#include "iflytop_xsync/iflytop_xsync.h"
-#include "project_configs.h"
-
-using namespace iflytop;
-// extern DMA_HandleTypeDef PC_DEBUG_UART_DMA_HANDLER;
-#define TAG "Device"
-
-void Device::init() {
- XS_LOGI(TAG, "%s:%s", PC_PROJECT_NAME, PC_VERSION);
- xs_gpio_init_as_output(&m_debug_led, PC_DEBUG_LIGHT_GPIO, kxs_gpio_nopull, false, false);
-
- // chip_cfg_t chipcfg = {};
- // chipcfg.us_dleay_tim = &PC_SYS_DELAY_US_TIMER;
- // chipcfg.tim_irq_scheduler_tim = &PC_SYS_TIM_IRQ_SCHEDULER_TIMER;
- // chipcfg.huart = &PC_DEBUG_UART;
- // chipcfg.debuglight = PC_DEBUG_LIGHT_GPIO;
-
- // chip_init(&chipcfg);
-
- // zos_cfg_t zoscfg;
- // zos_init(&zoscfg);
-}
-void Device::loop() {
- while (1) {
- // xs_gpio_write(&m_debug_led, true);
- // xs_delay_ms(1000);
- // xs_gpio_write(&m_debug_led, false);
- // xs_delay_ms(1000);
- }
-}
diff --git a/usrc/service/device.hpp b/usrc/service/device.hpp
deleted file mode 100644
index 23e9ed4..0000000
--- a/usrc/service/device.hpp
+++ /dev/null
@@ -1,12 +0,0 @@
-#pragma once
-#include "iflytop_xsync/iflytop_xsync.h"
-#include "project_configs.h"
-namespace iflytop {
-class Device {
- xs_gpio_t m_debug_led;
-
- public:
- void init();
- void loop();
-};
-} // namespace iflytop
\ No newline at end of file
diff --git a/usrc/service/device_info.cpp b/usrc/service/device_info.cpp
new file mode 100644
index 0000000..d0766bb
--- /dev/null
+++ b/usrc/service/device_info.cpp
@@ -0,0 +1,5 @@
+
+
+#include "device_info.hpp"
+
+void device_info_init() {}
diff --git a/usrc/service/device_info.hpp b/usrc/service/device_info.hpp
new file mode 100644
index 0000000..5294209
--- /dev/null
+++ b/usrc/service/device_info.hpp
@@ -0,0 +1,13 @@
+#pragma once
+#include "iflytop_xsync/iflytop_xsync.h"
+#include "project_configs.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void device_info_init();
+
+#ifdef __cplusplus
+}
+#endif
\ No newline at end of file
diff --git a/usrc/service/extern_if_service.c b/usrc/service/extern_if_service.c
index f52e15a..adbe27b 100644
--- a/usrc/service/extern_if_service.c
+++ b/usrc/service/extern_if_service.c
@@ -5,8 +5,8 @@
#include "iflytop_xsync\xs_udp.h"
#include "reg_manager.h"
-udp_t m_udp_cmd_server; //
-udp_broadcast_handler_t m_udp_camera_sync_sender; //
+static udp_t m_udp_cmd_server; //
+static udp_broadcast_handler_t m_udp_camera_sync_sender; //
static struct sockaddr_in m_last_rxpacket_client;
static bool m_last_rxpacket_client_valid = false;
@@ -36,7 +36,7 @@ static void create_and_send_receipt(extern_if_service_context_t *context, uint32
txpacket->cmd = context->rxpacket->cmd;
txpacket->ndata = ndata;
memcpy(txpacket->data, data, ndata * sizeof(uint32_t));
- udp_send_message2(context->server, context->client, txbuf, sizeof(iflytop_xsync_packet_header_t) + ndata * sizeof(uint32_t));
+ xs_udp_send_message2(context->server, context->client, txbuf, sizeof(iflytop_xsync_packet_header_t) + ndata * sizeof(uint32_t));
}
#if 0
/**
@@ -55,7 +55,7 @@ static void create_and_send_timecode(struct sockaddr_in client, uint32_t timecod
txpacket->ndata = 2;
txpacket->data[0] = timecode0;
txpacket->data[1] = timecode1;
- udp_send_message2(&m_udp_cmd_server, &client, txbuf, sizeof(iflytop_xsync_packet_header_t) + 2 * sizeof(uint32_t));
+ xs_udp_send_message2(&m_udp_cmd_server, &client, txbuf, sizeof(iflytop_xsync_packet_header_t) + 2 * sizeof(uint32_t));
}
#endif
@@ -122,7 +122,7 @@ static void udp_server_receive_thread(void const *argument) { //
}
}
-void extern_if_service_init() { ZASSERT(udp_init(&m_udp_cmd_server, IFLYTOP_XSYNC_SERVICE_PORT, udp_on_packet, NULL)); }
+void extern_if_service_init() { ZASSERT(xs_udp_init(&m_udp_cmd_server, IFLYTOP_XSYNC_SERVICE_PORT, udp_on_packet, NULL)); }
#if 0
void extern_if_service_send_timecode(struct sockaddr_in client, uint32_t timecode0, uint32_t timecode1) { create_and_send_timecode(client, timecode0, timecode1); }
#endif
diff --git a/usrc/service/extern_if_service.h b/usrc/service/extern_if_service.h
index 46824a1..6f61faf 100644
--- a/usrc/service/extern_if_service.h
+++ b/usrc/service/extern_if_service.h
@@ -1,5 +1,9 @@
#pragma once
#include
+#ifdef __cplusplus
+extern "C" {
+#endif
+
/**
* @brief
* 该模块主要处理来自上位机的消息
@@ -19,4 +23,8 @@ void extern_if_service_init();
* @param timecode1
*/
void extern_if_service_send_timecode(struct sockaddr_in client, uint32_t timecode0, uint32_t timecode1);
+#endif
+
+#ifdef __cplusplus
+}
#endif
\ No newline at end of file
diff --git a/usrc/service/reg_manager.c b/usrc/service/reg_manager.c
index 47fd922..9426576 100644
--- a/usrc/service/reg_manager.c
+++ b/usrc/service/reg_manager.c
@@ -2,6 +2,8 @@
uint32_t reg[MAX_REG_NUM];
+void reg_manager_init() {}
+
uint32_t reg_manager_read_reg(uint32_t addr) {
if (addr < MAX_REG_NUM) return reg[addr];
return 0;
diff --git a/usrc/service/reg_manager.h b/usrc/service/reg_manager.h
index 9ae3ba8..034302d 100644
--- a/usrc/service/reg_manager.h
+++ b/usrc/service/reg_manager.h
@@ -7,10 +7,12 @@ extern "C" {
#define MAX_REG_NUM 256
+void reg_manager_init();
+
uint32_t reg_manager_read_reg(uint32_t addr);
uint32_t reg_manager_write_reg(uint32_t addr, uint32_t value);
-void reg_manager_read_regs(uint32_t start_addr, uint32_t nreg, uint32_t* datacache, uint32_t* len);
+void reg_manager_read_regs(uint32_t start_addr, uint32_t nreg, uint32_t* datacache, uint32_t* len);
#ifdef __cplusplus
}
diff --git a/usrc/service/report_generator_service.c b/usrc/service/report_generator_service.c
index 186fb4e..734db66 100644
--- a/usrc/service/report_generator_service.c
+++ b/usrc/service/report_generator_service.c
@@ -6,15 +6,13 @@
#include "iflytop_xsync\xs_udp.h"
#include "reg_manager.h"
-udp_broadcast_handler_t m_udp_camera_sync_sender; //
-udp_broadcast_handler_t m_udp_camera_timecode_sender; //
+static udp_broadcast_handler_t m_udp_camera_sync_sender; //
+static udp_broadcast_handler_t m_udp_camera_timecode_sender; //
osThreadId timecode_report_thread_id;
osThreadId xync_signal_report_thread_id;
-static volatile bool m_timecode_signal_notify_flag = false;
-static volatile bool m_xync_signal_notify_flag = false;
-static uint32_t m_sync_count = 0;
+static uint32_t m_sync_count = 0;
static uint32_t m_timecode_trigger_input_off;
static uint32_t m_xync_trigger_input_off;
@@ -31,7 +29,7 @@ static void create_and_send_timecode(uint32_t timecode0, uint32_t timecode1) {
iflytop_timecode_report_packet_t *txpacket = (iflytop_timecode_report_packet_t *)txbuf;
txpacket->timecode0 = timecode0;
txpacket->timecode1 = timecode1;
- udp_broadcast(&m_udp_camera_timecode_sender, IFLYTOP_XSYNC_TIMECODE_REPORT_TO_PORT, txpacket, sizeof(iflytop_timecode_report_packet_t));
+ xs_udp_broadcast(&m_udp_camera_timecode_sender, IFLYTOP_XSYNC_TIMECODE_REPORT_TO_PORT, txbuf, sizeof(iflytop_timecode_report_packet_t));
}
/**
* @brief 构建并发送相机同步数据包
@@ -39,7 +37,7 @@ static void create_and_send_timecode(uint32_t timecode0, uint32_t timecode1) {
* @param count
*/
static void create_and_send_camera_sync_msg(uint32_t count) {
- static txbuf[] = {
+ static uint8_t txbuf[] = {
0xF0, 0x00, 0x20, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xF0, 0x42, 0x17, 0x00, 0x00, 0x00, 0xE1, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x78, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
@@ -49,42 +47,40 @@ static void create_and_send_camera_sync_msg(uint32_t count) {
txbuf[5] = (count >> 16) & 0xFF;
txbuf[4] = (count >> 24) & 0xFF;
- udp_broadcast(&m_udp_camera_sync_sender, IFLYTOP_XSYNC_CAMERA_SYNC_PACKET_TO_PORT, txbuf, sizeof(txbuf));
+ xs_udp_broadcast(&m_udp_camera_sync_sender, IFLYTOP_XSYNC_CAMERA_SYNC_PACKET_TO_PORT, txbuf, sizeof(txbuf));
}
static void timecode_report_thread(void const *argument) {
while (true) {
- ulTaskNotifyTake(timecode_report_thread_id, portMAX_DELAY);
- if (m_timecode_signal_notify_flag) {
+ osEvent signal = osSignalWait(0x01, osWaitForever);
+ if (signal.value.signals == 0x01) {
uint32_t timecode0, timecode1;
fpga_if_get_timecode(&timecode0, &timecode1);
create_and_send_timecode(timecode0, timecode1);
}
- m_timecode_signal_notify_flag = false;
+ // osSignalClear(timecode_report_thread_id, 0x01);
}
}
static void xync_signal_report_thread(void const *argument) {
while (true) {
- ulTaskNotifyTake(xync_signal_report_thread_id, portMAX_DELAY);
- if (m_xync_signal_notify_flag) create_and_send_camera_sync_msg(m_sync_count++);
- m_xync_signal_notify_flag = false;
+ osEvent signal = osSignalWait(0x01, osWaitForever);
+ if (signal.value.signals == 0x01) create_and_send_camera_sync_msg(m_sync_count++);
+ // osSignalClear(xync_signal_report_thread_id, 0x01);
}
}
void report_generator_service_irq_trigger(uint16_t gpiopin) {
if (gpiopin == m_timecode_trigger_input_off) {
- m_timecode_signal_notify_flag = true;
- vTaskNotifyGiveFromISR(timecode_report_thread_id, NULL);
+ osSignalSet(timecode_report_thread_id, 0x01);
}
if (gpiopin == m_xync_trigger_input_off) {
- m_xync_signal_notify_flag = true;
- vTaskNotifyGiveFromISR(xync_signal_report_thread_id, NULL);
+ osSignalSet(xync_signal_report_thread_id, 0x01);
}
}
void report_generator_service_init() {
- ZASSERT(udp_broadcast_init(&m_udp_camera_sync_sender, IFLYTOP_XSYNC_CAMERA_SYNC_PACKET_FROM_PORT));
- ZASSERT(udp_broadcast_init(&m_udp_camera_timecode_sender, IFLYTOP_XSYNC_TIMECODE_REPORT_FROM_PORT));
+ ZASSERT(xs_udp_broadcast_init(&m_udp_camera_sync_sender, IFLYTOP_XSYNC_CAMERA_SYNC_PACKET_FROM_PORT));
+ ZASSERT(xs_udp_broadcast_init(&m_udp_camera_timecode_sender, IFLYTOP_XSYNC_TIMECODE_REPORT_FROM_PORT));
osThreadDef(timecode_report_thread, timecode_report_thread, osPriorityNormal, 0, 512);
timecode_report_thread_id = osThreadCreate(osThread(timecode_report_thread), NULL);
diff --git a/usrc/service/report_generator_service.h b/usrc/service/report_generator_service.h
index e6549df..0f62aa6 100644
--- a/usrc/service/report_generator_service.h
+++ b/usrc/service/report_generator_service.h
@@ -3,11 +3,15 @@
#include "iflytop_xsync\pin.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
/**
* @brief 模块说明
* 该模块监听FPGA秒时钟中断,和timecode中断
* 当中断发生时,上报相应的数据。
- *
+ *
* 该模块依赖:
* fpag_if.c
* config_service.c
@@ -36,4 +40,8 @@ void report_generator_service_xsync_clear_count(void);
*
* @return uint32_t
*/
-uint32_t report_generator_service_xsync_get_count(void);
\ No newline at end of file
+uint32_t report_generator_service_xsync_get_count(void);
+
+#ifdef __cplusplus
+}
+#endif
\ No newline at end of file
diff --git a/xsync_stm32.ioc b/xsync_stm32.ioc
index efe4873..f240b21 100644
--- a/xsync_stm32.ioc
+++ b/xsync_stm32.ioc
@@ -58,11 +58,12 @@ Mcu.CPN=STM32F407VET6
Mcu.Family=STM32F4
Mcu.IP0=CRC
Mcu.IP1=DMA
-Mcu.IP10=TIM1
-Mcu.IP11=TIM3
-Mcu.IP12=TIM6
-Mcu.IP13=TIM7
-Mcu.IP14=USART1
+Mcu.IP10=SYS
+Mcu.IP11=TIM1
+Mcu.IP12=TIM3
+Mcu.IP13=TIM6
+Mcu.IP14=TIM7
+Mcu.IP15=USART1
Mcu.IP2=ETH
Mcu.IP3=FREERTOS
Mcu.IP4=LWIP
@@ -70,39 +71,44 @@ Mcu.IP5=NVIC
Mcu.IP6=RCC
Mcu.IP7=RNG
Mcu.IP8=SPI1
-Mcu.IP9=SYS
-Mcu.IPNb=15
+Mcu.IP9=SPI2
+Mcu.IPNb=16
Mcu.Name=STM32F407V(E-G)Tx
Mcu.Package=LQFP100
Mcu.Pin0=PH0-OSC_IN
Mcu.Pin1=PH1-OSC_OUT
-Mcu.Pin10=PB11
-Mcu.Pin11=PB12
-Mcu.Pin12=PB13
-Mcu.Pin13=PA9
-Mcu.Pin14=PA10
-Mcu.Pin15=PA13
-Mcu.Pin16=PA14
-Mcu.Pin17=PD3
-Mcu.Pin18=PB5
-Mcu.Pin19=VP_CRC_VS_CRC
+Mcu.Pin10=PA7
+Mcu.Pin11=PC4
+Mcu.Pin12=PC5
+Mcu.Pin13=PB10
+Mcu.Pin14=PB11
+Mcu.Pin15=PB12
+Mcu.Pin16=PB13
+Mcu.Pin17=PA9
+Mcu.Pin18=PA10
+Mcu.Pin19=PA13
Mcu.Pin2=PC1
-Mcu.Pin20=VP_FREERTOS_VS_CMSIS_V1
-Mcu.Pin21=VP_LWIP_VS_Enabled
-Mcu.Pin22=VP_RNG_VS_RNG
-Mcu.Pin23=VP_SYS_VS_tim11
-Mcu.Pin24=VP_TIM1_VS_ClockSourceINT
-Mcu.Pin25=VP_TIM3_VS_ClockSourceINT
-Mcu.Pin26=VP_TIM6_VS_ClockSourceINT
-Mcu.Pin27=VP_TIM7_VS_ClockSourceINT
-Mcu.Pin3=PA1
-Mcu.Pin4=PA2
-Mcu.Pin5=PA5
-Mcu.Pin6=PA6
-Mcu.Pin7=PA7
-Mcu.Pin8=PC4
-Mcu.Pin9=PC5
-Mcu.PinsNb=28
+Mcu.Pin20=PA14
+Mcu.Pin21=PD3
+Mcu.Pin22=PB5
+Mcu.Pin23=PB9
+Mcu.Pin24=VP_CRC_VS_CRC
+Mcu.Pin25=VP_FREERTOS_VS_CMSIS_V1
+Mcu.Pin26=VP_LWIP_VS_Enabled
+Mcu.Pin27=VP_RNG_VS_RNG
+Mcu.Pin28=VP_SYS_VS_tim11
+Mcu.Pin29=VP_TIM1_VS_ClockSourceINT
+Mcu.Pin3=PC2
+Mcu.Pin30=VP_TIM3_VS_ClockSourceINT
+Mcu.Pin31=VP_TIM6_VS_ClockSourceINT
+Mcu.Pin32=VP_TIM7_VS_ClockSourceINT
+Mcu.Pin4=PC3
+Mcu.Pin5=PA1
+Mcu.Pin6=PA2
+Mcu.Pin7=PA4
+Mcu.Pin8=PA5
+Mcu.Pin9=PA6
+Mcu.PinsNb=33
Mcu.ThirdPartyNb=0
Mcu.UserConstants=
Mcu.UserName=STM32F407VETx
@@ -139,6 +145,8 @@ PA14.Mode=Serial_Wire
PA14.Signal=SYS_JTCK-SWCLK
PA2.Mode=RMII
PA2.Signal=ETH_MDIO
+PA4.Mode=NSS_Signal_Hard_Output
+PA4.Signal=SPI1_NSS
PA5.Mode=Full_Duplex_Master
PA5.Signal=SPI1_SCK
PA6.Mode=Full_Duplex_Master
@@ -148,6 +156,8 @@ PA7.Signal=ETH_CRS_DV
PA9.Locked=true
PA9.Mode=Asynchronous
PA9.Signal=USART1_TX
+PB10.Mode=Full_Duplex_Master
+PB10.Signal=SPI2_SCK
PB11.Mode=RMII
PB11.Signal=ETH_TX_EN
PB12.Mode=RMII
@@ -156,8 +166,14 @@ PB13.Mode=RMII
PB13.Signal=ETH_TXD1
PB5.Mode=Full_Duplex_Master
PB5.Signal=SPI1_MOSI
+PB9.Mode=NSS_Signal_Hard_Output
+PB9.Signal=SPI2_NSS
PC1.Mode=RMII
PC1.Signal=ETH_MDC
+PC2.Mode=Full_Duplex_Master
+PC2.Signal=SPI2_MISO
+PC3.Mode=Full_Duplex_Master
+PC3.Signal=SPI2_MOSI
PC4.Mode=RMII
PC4.Signal=ETH_RXD0
PC5.Mode=RMII
@@ -199,7 +215,7 @@ ProjectManager.ToolChainLocation=
ProjectManager.UAScriptAfterPath=
ProjectManager.UAScriptBeforePath=
ProjectManager.UnderRoot=true
-ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_USART1_UART_Init-USART1-false-HAL-true,5-MX_TIM3_Init-TIM3-false-HAL-true,6-MX_CRC_Init-CRC-false-HAL-true,7-MX_RNG_Init-RNG-false-HAL-true,8-MX_TIM7_Init-TIM7-false-HAL-true,9-MX_TIM6_Init-TIM6-false-HAL-true,10-MX_TIM1_Init-TIM1-false-HAL-true,11-MX_LWIP_Init-LWIP-false-HAL-false
+ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_USART1_UART_Init-USART1-false-HAL-true,5-MX_TIM3_Init-TIM3-false-HAL-true,6-MX_CRC_Init-CRC-false-HAL-true,7-MX_RNG_Init-RNG-false-HAL-true,8-MX_TIM7_Init-TIM7-false-HAL-true,9-MX_TIM6_Init-TIM6-false-HAL-true,10-MX_TIM1_Init-TIM1-false-HAL-true,11-MX_LWIP_Init-LWIP-false-HAL-false,12-MX_SPI1_Init-SPI1-false-HAL-true,13-MX_SPI2_Init-SPI2-false-HAL-true
RCC.48MHZClocksFreq_Value=48000000
RCC.AHBFreq_Value=144000000
RCC.APB1CLKDivider=RCC_HCLK_DIV4
@@ -240,11 +256,25 @@ RCC.VCOI2SOutputFreq_Value=128000000
RCC.VCOInputFreq_Value=2000000
RCC.VCOOutputFreq_Value=288000000
RCC.VcooutputI2S=64000000
-SPI1.CalculateBaudRate=36.0 MBits/s
+SPI1.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_4
+SPI1.CLKPhase=SPI_PHASE_2EDGE
+SPI1.CLKPolarity=SPI_POLARITY_HIGH
+SPI1.CalculateBaudRate=18.0 MBits/s
SPI1.Direction=SPI_DIRECTION_2LINES
-SPI1.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate
+SPI1.FirstBit=SPI_FIRSTBIT_LSB
+SPI1.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,VirtualNSS,BaudRatePrescaler,FirstBit,CLKPolarity,CLKPhase
SPI1.Mode=SPI_MODE_MASTER
+SPI1.VirtualNSS=VM_NSSHARD
SPI1.VirtualType=VM_MASTER
+SPI2.CLKPhase=SPI_PHASE_2EDGE
+SPI2.CLKPolarity=SPI_POLARITY_HIGH
+SPI2.CalculateBaudRate=18.0 MBits/s
+SPI2.Direction=SPI_DIRECTION_2LINES
+SPI2.FirstBit=SPI_FIRSTBIT_LSB
+SPI2.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,VirtualNSS,CLKPolarity,CLKPhase,FirstBit
+SPI2.Mode=SPI_MODE_MASTER
+SPI2.VirtualNSS=VM_NSSHARD
+SPI2.VirtualType=VM_MASTER
TIM1.IPParameters=Period,Prescaler
TIM1.Period=9999
TIM1.Prescaler=143