Browse Source

update

master
zhaohe 2 years ago
parent
commit
2304e9c819
  1. 4
      .settings/language.settings.xml
  2. 3
      .vscode/settings.json
  3. 3
      Core/Inc/spi.h
  4. 30
      Core/Src/gpio.c
  5. 1
      Core/Src/main.c
  6. 105
      Core/Src/spi.c
  7. 2
      LWIP/Target/ethernetif.c
  8. 39
      README.md
  9. 12
      iflytop_xsync/xs_udp.c
  10. 10
      iflytop_xsync/xs_udp.h
  11. 42
      usrc/base_service/fpga_if.c
  12. 39
      usrc/base_service/fpga_if.h
  13. 48
      usrc/main.cpp
  14. 32
      usrc/service/device.cpp
  15. 12
      usrc/service/device.hpp
  16. 5
      usrc/service/device_info.cpp
  17. 13
      usrc/service/device_info.hpp
  18. 10
      usrc/service/extern_if_service.c
  19. 8
      usrc/service/extern_if_service.h
  20. 2
      usrc/service/reg_manager.c
  21. 4
      usrc/service/reg_manager.h
  22. 36
      usrc/service/report_generator_service.c
  23. 12
      usrc/service/report_generator_service.h
  24. 102
      xsync_stm32.ioc

4
.settings/language.settings.xml

@ -5,7 +5,7 @@
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-561685569534312857" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="1135599026803643439" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
<language-scope id="org.eclipse.cdt.core.gcc"/>
<language-scope id="org.eclipse.cdt.core.g++"/>
</provider>
@ -16,7 +16,7 @@
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-676323101783886248" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="1020961494554070048" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
<language-scope id="org.eclipse.cdt.core.gcc"/>
<language-scope id="org.eclipse.cdt.core.g++"/>
</provider>

3
.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"

3
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 */

30
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);

1
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 */

105
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 */

2
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;

39
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
```

12
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);

10
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
}

42
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; }

39
usrc/base_service/fpga_if.h

@ -2,14 +2,17 @@
#include <stdint.h>
#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();
#ifdef __cplusplus
}
#endif

48
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);

32
usrc/service/device.cpp

@ -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);
}
}

12
usrc/service/device.hpp

@ -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

5
usrc/service/device_info.cpp

@ -0,0 +1,5 @@
#include "device_info.hpp"
void device_info_init() {}

13
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

10
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

8
usrc/service/extern_if_service.h

@ -1,5 +1,9 @@
#pragma once
#include <stdint.h>
#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

2
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;

4
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
}

36
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);

12
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);
uint32_t report_generator_service_xsync_get_count(void);
#ifdef __cplusplus
}
#endif

102
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

Loading…
Cancel
Save