From 2304e9c819b100443c2ebcccc6a2f429e724e3c0 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Wed, 3 Jan 2024 11:55:35 +0800 Subject: [PATCH] update --- .settings/language.settings.xml | 4 +- .vscode/settings.json | 3 +- Core/Inc/spi.h | 3 + Core/Src/gpio.c | 30 +++++---- Core/Src/main.c | 1 + Core/Src/spi.c | 105 +++++++++++++++++++++++++++++--- LWIP/Target/ethernetif.c | 2 +- README.md | 39 +----------- iflytop_xsync/xs_udp.c | 12 ++-- iflytop_xsync/xs_udp.h | 10 +-- usrc/base_service/fpga_if.c | 42 +++++++------ usrc/base_service/fpga_if.h | 39 +++++++++--- usrc/main.cpp | 48 +++++++++++++-- usrc/service/device.cpp | 32 ---------- usrc/service/device.hpp | 12 ---- usrc/service/device_info.cpp | 5 ++ usrc/service/device_info.hpp | 13 ++++ usrc/service/extern_if_service.c | 10 +-- usrc/service/extern_if_service.h | 8 +++ usrc/service/reg_manager.c | 2 + usrc/service/reg_manager.h | 4 +- usrc/service/report_generator_service.c | 36 +++++------ usrc/service/report_generator_service.h | 12 +++- xsync_stm32.ioc | 102 ++++++++++++++++++++----------- 24 files changed, 359 insertions(+), 215 deletions(-) delete mode 100644 usrc/service/device.cpp delete mode 100644 usrc/service/device.hpp create mode 100644 usrc/service/device_info.cpp create mode 100644 usrc/service/device_info.hpp 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