8 Commits

13 changed files with 223 additions and 5593 deletions
+2 -2
View File
File diff suppressed because one or more lines are too long
+11
View File
@@ -0,0 +1,11 @@
#ifndef __KSZ8081RND
#define __KSZ8081RND
int KSZ8081RND_run_test(void);
int ReadRegister(uint32_t reg, uint16_t *value);
int WriteRegister(uint32_t reg, uint16_t value);
#endif
+2 -2
View File
@@ -45,7 +45,7 @@
/* #define HAL_DAC_MODULE_ENABLED */
/* #define HAL_DCMI_MODULE_ENABLED */
/* #define HAL_DMA2D_MODULE_ENABLED */
#define HAL_ETH_MODULE_ENABLED
/* #define HAL_ETH_MODULE_ENABLED */
/* #define HAL_ETH_LEGACY_MODULE_ENABLED */
/* #define HAL_NAND_MODULE_ENABLED */
/* #define HAL_NOR_MODULE_ENABLED */
@@ -214,7 +214,7 @@
#define MAC_ADDR5 0U
/* Definition of the Ethernet driver buffers size and count */
#define ETH_RX_BUF_SIZE 1524 /* buffer size for receive */
#define ETH_RX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for receive */
#define ETH_TX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for transmit */
#define ETH_RXBUFNB 4U /* 4 Rx buffers of size ETH_RX_BUF_SIZE */
#define ETH_TXBUFNB 4U /* 4 Tx buffers of size ETH_TX_BUF_SIZE */
+3 -18
View File
@@ -44,8 +44,6 @@ int EEPROM_24AA02E48_run_test(void)
display_write_data_seq("TIMEOUT");
break;
}
HAL_Delay(2000);
} else {
break;
}
@@ -78,29 +76,16 @@ int EEPROM_24AA02E48_run_test(void)
display_write_data_seq("TIMEOUT");
break;
}
HAL_Delay(2000);
} else {
break;
}
}
DISPLAY_CLEAR;
display_write_data_seq("24AA02E48 EEPROM");
if (err_count) {
DISPLAY_SET_CURSOR(1, 4);
display_write_data_byte('0' + (err_count / 10) % 10);
display_write_data_byte('0' + err_count % 10);
display_write_data_seq("E ");
display_write_data_seq((char *) data_buffer);
return 1;
} else {
if (!err_count) {
DISPLAY_SET_CURSOR(1, 4);
display_write_data_seq("OK ");
display_write_data_seq((char *) data_buffer);
}
return 0;
}
return !!err_count;
}
+8 -3
View File
@@ -31,9 +31,12 @@ static size_t dht11_read_value(struct DHT11_Data *data)
register uint32_t read_register = 0;
TIM2->CNT = 0;
HAL_TIM_Base_Start(&htim2);
// try to trigger the output
for (int t = 0; t < 10; t++) {
TIM2->CNT = 0;
GPIOD->MODER |= 0x00400000; // enable output mode on GPIOD 11
GPIOD->BSRR = GPIO_PIN_11; // enable DHT11
@@ -48,12 +51,14 @@ static size_t dht11_read_value(struct DHT11_Data *data)
// reading pull down from DHT11
SKIP_LOW;
// waiting for 500ms max
for (size_t i = TIM2->CNT + (500000 << 4); TIM2->CNT <= i; )
// waiting for response
for (size_t i = TIM2->CNT + (200000 << 4); TIM2->CNT <= i; )
if (!(GPIOD->IDR & 0x0800))
goto reading_data;
}
// if didn't exit through goto, then DHT11 awaiting has timed out
HAL_TIM_Base_Stop(&htim2);
return 1;
reading_data:
+138
View File
@@ -0,0 +1,138 @@
#include "main.h"
#include "lcd.h"
#include "KSZ8081RND.h"
#define RW_TIMEOUT_US 500000
extern TIM_HandleTypeDef htim2;
int KSZ8081RND_run_test(void)
{
DISPLAY_CLEAR;
display_write_data_seq("KSZ8081RND ETH");
DISPLAY_SET_CURSOR(1, 4);
// enable clocks
__HAL_RCC_ETH_CLK_ENABLE();
__HAL_RCC_GPIOC_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
// configure pins
GPIO_InitTypeDef GPIO_InitStruct = {};
GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF11_ETH;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF11_ETH;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF11_ETH;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
// hardware reset KSZ8081RND
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_10, GPIO_PIN_RESET);
HAL_Delay(10);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_10, GPIO_PIN_SET);
HAL_Delay(10);
// enable PLL and REF_CLK output from KSZ8081RND
uint16_t r;
if (ReadRegister(0x1F, &r)) {
display_write_data_seq("READ ERROR");
return 1;
}
r |= (1 << 7);
if (WriteRegister(0x1F, r)) {
display_write_data_seq("WRITE ERROR");
return 1;
}
// switch MAC to RMII interface
__HAL_RCC_SYSCFG_CLK_ENABLE();
SYSCFG->PMC |= (1 << 23);
(void)SYSCFG->PMC;
// check if software reset happens on MAC
TIM2->CNT = 0;
ETH->DMABMR |= 1; // assert software reset
HAL_TIM_Base_Start(&htim2);
while (ETH->DMABMR & 1) {
if (TIM2->CNT > (500000 << 4)) {
// MAC software reset timed out -> no REF_CLK output from PHY?
HAL_TIM_Base_Stop(&htim2);
display_write_data_seq("SR ERROR");
return 1;
}
}
HAL_TIM_Base_Stop(&htim2);
display_write_data_seq("OK");
return 0;
}
int ReadRegister(uint32_t reg, uint16_t *value)
{
uint16_t tmpreg1;
tmpreg1 = (reg << 6);
tmpreg1 |= 1;
ETH->MACMIIAR = tmpreg1;
TIM2->CNT = 0;
HAL_TIM_Base_Start(&htim2);
while (ETH->MACMIIAR & 1) {
if (TIM2->CNT > (RW_TIMEOUT_US << 4)) {
HAL_TIM_Base_Stop(&htim2);
return 1;
}
}
HAL_TIM_Base_Stop(&htim2);
*value = (uint16_t) (ETH->MACMIIDR);
return HAL_OK;
}
int WriteRegister(uint32_t reg, uint16_t value)
{
uint32_t tmpreg1;
tmpreg1 = (reg << 6);
tmpreg1 |= 3;
ETH->MACMIIDR = value;
ETH->MACMIIAR = tmpreg1;
TIM2->CNT = 0;
HAL_TIM_Base_Start(&htim2);
while (ETH->MACMIIAR & 1) {
if (TIM2->CNT > (RW_TIMEOUT_US << 4)) {
HAL_TIM_Base_Stop(&htim2);
return 1;
}
}
HAL_TIM_Base_Stop(&htim2);
return 0;
}
+3 -49
View File
@@ -55,8 +55,6 @@ static void print_error_message(HAL_StatusTypeDef result, size_t *err_count, siz
display_write_data_seq("TIMEOUT");
break;
}
HAL_Delay(2000);
}
static void retrieve_data(size_t *err_count, uint8_t *data_xyz, char *postfix)
@@ -115,52 +113,8 @@ int LIS302DL_run_test(void)
retrieve_data(&err_count, data_xyz, "");
DISPLAY_CLEAR;
display_write_data_seq("LIS302DL Accel");
// output retrieved values
print_at(data_xyz[2], 14);
print_at(data_xyz[1], 11);
print_at(data_xyz[0], 8);
// print the execution stats
if (err_count) {
DISPLAY_SET_CURSOR(1, 4);
display_write_data_byte('0' + (err_count / 10) % 10);
display_write_data_byte('0' + err_count % 10);
display_write_data_seq(" errs");
return 1;
} else {
DISPLAY_SET_CURSOR(1, 4);
display_write_data_seq("OK");
return 0;
}
}
int LIS302DL_run_test_dynamic(void)
{
DISPLAY_CLEAR;
display_write_data_seq("LIS302DL Accel D");
size_t err_count = 0;
uint8_t data_xyz[3];
retrieve_data(&err_count, data_xyz, "D");
DISPLAY_CLEAR;
display_write_data_seq("LIS302DL Accel D");
// print the execution stats
if (err_count) {
DISPLAY_SET_CURSOR(1, 4);
display_write_data_byte('0' + err_count / 10 % 10);
display_write_data_byte('0' + err_count % 10);
display_write_data_seq(" errs");
return 1;
} else {
if (!err_count) {
DISPLAY_SET_CURSOR(1, 4);
display_write_data_seq("OK");
@@ -168,7 +122,7 @@ int LIS302DL_run_test_dynamic(void)
print_at(data_xyz[2], 14);
print_at(data_xyz[1], 11);
print_at(data_xyz[0], 8);
}
return 0;
}
return !!err_count;
}
-12
View File
@@ -32,8 +32,6 @@ static void print_error_message(HAL_StatusTypeDef result, size_t *err_count, siz
display_write_data_seq("TIMEOUT");
break;
}
HAL_Delay(1000);
}
static void print_error_accel(HAL_StatusTypeDef result, size_t *err_count, size_t t, char *prefix)
@@ -87,11 +85,6 @@ int LSM9DS1_test_accel(void)
return 0;
} else {
DISPLAY_SET_CURSOR(1, 4);
display_write_data_byte('0' + ((err_count / 10) % 10));
display_write_data_byte('0' + (err_count % 10));
display_write_data_seq(" errors");
return 1;
}
}
@@ -129,11 +122,6 @@ int LSM9DS1_test_magnet(void)
return 0;
} else {
DISPLAY_SET_CURSOR(1, 4);
display_write_data_byte('0' + ((err_count / 10) % 10));
display_write_data_byte('0' + (err_count % 10));
display_write_data_seq(" errors");
return 1;
}
}
+5 -61
View File
@@ -18,7 +18,6 @@
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "string.h"
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
@@ -34,6 +33,7 @@
#include "MP45DT02.h"
#include "LSM9DS1.h"
#include "DHT11.h"
#include "KSZ8081RND.h"
/* USER CODE END Includes */
@@ -67,15 +67,8 @@
/* USER CODE END PM */
/* Private variables ---------------------------------------------------------*/
ETH_TxPacketConfig TxConfig;
ETH_DMADescTypeDef DMARxDscrTab[ETH_RX_DESC_CNT]; /* Ethernet Rx DMA Descriptors */
ETH_DMADescTypeDef DMATxDscrTab[ETH_TX_DESC_CNT]; /* Ethernet Tx DMA Descriptors */
ADC_HandleTypeDef hadc1;
ETH_HandleTypeDef heth;
I2C_HandleTypeDef hi2c1;
SPI_HandleTypeDef hspi1;
@@ -96,7 +89,8 @@ static const int ((*executors[])(void)) = {
MP45DT02_run_test,
LSM9DS1_test_accel,
LSM9DS1_test_magnet,
DHT11_run_test
DHT11_run_test,
KSZ8081RND_run_test
};
static const void ((*cleanup_functions[])(void)) = {
@@ -109,6 +103,7 @@ static const void ((*cleanup_functions[])(void)) = {
NULL,
LSM9DS1_cleanup_accel,
NULL,
NULL,
NULL
};
@@ -123,7 +118,6 @@ static void MX_ADC1_Init(void);
static void MX_I2C1_Init(void);
static void MX_SPI1_Init(void);
static void MX_TIM2_Init(void);
static void MX_ETH_Init(void);
/* USER CODE BEGIN PFP */
/* USER CODE END PFP */
@@ -166,9 +160,8 @@ int main(void)
MX_I2C1_Init();
MX_SPI1_Init();
MX_TIM2_Init();
MX_ETH_Init();
/* USER CODE BEGIN 2 */
back_to_life:
GPIOD->BSRR = 0x1000;
display_init();
@@ -380,55 +373,6 @@ static void MX_ADC1_Init(void)
}
/**
* @brief ETH Initialization Function
* @param None
* @retval None
*/
static void MX_ETH_Init(void)
{
/* USER CODE BEGIN ETH_Init 0 */
/* USER CODE END ETH_Init 0 */
static uint8_t MACAddr[6];
/* USER CODE BEGIN ETH_Init 1 */
/* USER CODE END ETH_Init 1 */
heth.Instance = ETH;
MACAddr[0] = 0x00;
MACAddr[1] = 0x80;
MACAddr[2] = 0xE1;
MACAddr[3] = 0x00;
MACAddr[4] = 0x00;
MACAddr[5] = 0x00;
heth.Init.MACAddr = &MACAddr[0];
heth.Init.MediaInterface = HAL_ETH_RMII_MODE;
heth.Init.TxDesc = DMATxDscrTab;
heth.Init.RxDesc = DMARxDscrTab;
heth.Init.RxBuffLen = 1524;
/* USER CODE BEGIN MACADDRESS */
/* USER CODE END MACADDRESS */
if (HAL_ETH_Init(&heth) != HAL_OK)
{
Error_Handler();
}
memset(&TxConfig, 0 , sizeof(ETH_TxPacketConfig));
TxConfig.Attributes = ETH_TX_PACKETS_FEATURES_CSUM | ETH_TX_PACKETS_FEATURES_CRCPAD;
TxConfig.ChecksumCtrl = ETH_CHECKSUM_IPHDR_PAYLOAD_INSERT_PHDR_CALC;
TxConfig.CRCPadCtrl = ETH_CRC_PAD_INSERT;
/* USER CODE BEGIN ETH_Init 2 */
/* USER CODE END ETH_Init 2 */
}
/**
* @brief I2C1 Initialization Function
* @param None
-110
View File
@@ -140,116 +140,6 @@ void HAL_ADC_MspDeInit(ADC_HandleTypeDef* hadc)
}
/**
* @brief ETH MSP Initialization
* This function configures the hardware resources used in this example
* @param heth: ETH handle pointer
* @retval None
*/
void HAL_ETH_MspInit(ETH_HandleTypeDef* heth)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
if(heth->Instance==ETH)
{
/* USER CODE BEGIN ETH_MspInit 0 */
/* USER CODE END ETH_MspInit 0 */
/* Peripheral clock enable */
__HAL_RCC_ETH_CLK_ENABLE();
__HAL_RCC_GPIOC_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
/**ETH GPIO Configuration
PC1 ------> ETH_MDC
PA1 ------> ETH_REF_CLK
PA2 ------> ETH_MDIO
PA7 ------> ETH_CRS_DV
PC4 ------> ETH_RXD0
PC5 ------> ETH_RXD1
PB11 ------> ETH_TX_EN
PB12 ------> ETH_TXD0
PB13 ------> ETH_TXD1
*/
GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF11_ETH;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF11_ETH;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF11_ETH;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/* USER CODE BEGIN ETH_MspInit 1 */
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_10, GPIO_PIN_RESET);
HAL_Delay(200);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_SET);
HAL_Delay(200);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_10, GPIO_PIN_SET);
HAL_Delay(200);
uint32_t r;
HAL_ETH_ReadPHYRegister(heth, 0x0, 0x1F, &r);
r |= (1 << 7);
HAL_ETH_WritePHYRegister(heth, 0x0, 0x1F, r);
/* USER CODE END ETH_MspInit 1 */
}
}
/**
* @brief ETH MSP De-Initialization
* This function freeze the hardware resources used in this example
* @param heth: ETH handle pointer
* @retval None
*/
void HAL_ETH_MspDeInit(ETH_HandleTypeDef* heth)
{
if(heth->Instance==ETH)
{
/* USER CODE BEGIN ETH_MspDeInit 0 */
/* USER CODE END ETH_MspDeInit 0 */
/* Peripheral clock disable */
__HAL_RCC_ETH_CLK_DISABLE();
/**ETH GPIO Configuration
PC1 ------> ETH_MDC
PA1 ------> ETH_REF_CLK
PA2 ------> ETH_MDIO
PA7 ------> ETH_CRS_DV
PC4 ------> ETH_RXD0
PC5 ------> ETH_RXD1
PB11 ------> ETH_TX_EN
PB12 ------> ETH_TXD0
PB13 ------> ETH_TXD1
*/
HAL_GPIO_DeInit(GPIOC, GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5);
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_7);
HAL_GPIO_DeInit(GPIOB, GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13);
/* USER CODE BEGIN ETH_MspDeInit 1 */
/* USER CODE END ETH_MspDeInit 1 */
}
}
/**
* @brief I2C MSP Initialization
* This function configures the hardware resources used in this example
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+39 -69
View File
@@ -10,65 +10,53 @@ ADC1.master=1
CAD.formats=
CAD.pinconfig=
CAD.provider=
ETH.IPParameters=MediaInterface
ETH.MediaInterface=HAL_ETH_RMII_MODE
File.Version=6
GPIO.groupedBy=Group By Peripherals
KeepUserPlacement=false
Mcu.CPN=STM32F407VGT6
Mcu.Family=STM32F4
Mcu.IP0=ADC1
Mcu.IP1=ETH
Mcu.IP2=I2C1
Mcu.IP3=NVIC
Mcu.IP4=RCC
Mcu.IP5=SPI1
Mcu.IP6=SYS
Mcu.IP7=TIM2
Mcu.IPNb=8
Mcu.IP1=I2C1
Mcu.IP2=NVIC
Mcu.IP3=RCC
Mcu.IP4=SPI1
Mcu.IP5=SYS
Mcu.IP6=TIM2
Mcu.IPNb=7
Mcu.Name=STM32F407V(E-G)Tx
Mcu.Package=LQFP100
Mcu.Pin0=PC1
Mcu.Pin1=PC3
Mcu.Pin10=PE7
Mcu.Pin11=PE10
Mcu.Pin12=PE11
Mcu.Pin13=PE12
Mcu.Pin14=PE13
Mcu.Pin15=PE14
Mcu.Pin16=PE15
Mcu.Pin17=PB10
Mcu.Pin18=PB11
Mcu.Pin19=PB12
Mcu.Pin2=PA0-WKUP
Mcu.Pin20=PB13
Mcu.Pin21=PD11
Mcu.Pin22=PD12
Mcu.Pin23=PD13
Mcu.Pin24=PD14
Mcu.Pin25=PD15
Mcu.Pin26=PC6
Mcu.Pin27=PC8
Mcu.Pin28=PC9
Mcu.Pin29=PA15
Mcu.Pin3=PA1
Mcu.Pin30=PC11
Mcu.Pin31=PD4
Mcu.Pin32=PD7
Mcu.Pin33=PB4
Mcu.Pin34=PB5
Mcu.Pin35=PB6
Mcu.Pin36=PB7
Mcu.Pin37=PB9
Mcu.Pin38=VP_SYS_VS_Systick
Mcu.Pin39=VP_TIM2_VS_ClockSourceINT
Mcu.Pin4=PA2
Mcu.Pin5=PA5
Mcu.Pin6=PA7
Mcu.Pin7=PC4
Mcu.Pin8=PC5
Mcu.Pin9=PB1
Mcu.PinsNb=40
Mcu.Pin0=PC3
Mcu.Pin1=PA0-WKUP
Mcu.Pin10=PE15
Mcu.Pin11=PB10
Mcu.Pin12=PD11
Mcu.Pin13=PD12
Mcu.Pin14=PD13
Mcu.Pin15=PD14
Mcu.Pin16=PD15
Mcu.Pin17=PC6
Mcu.Pin18=PC8
Mcu.Pin19=PC9
Mcu.Pin2=PA5
Mcu.Pin20=PA15
Mcu.Pin21=PC11
Mcu.Pin22=PD4
Mcu.Pin23=PD7
Mcu.Pin24=PB4
Mcu.Pin25=PB5
Mcu.Pin26=PB6
Mcu.Pin27=PB7
Mcu.Pin28=PB9
Mcu.Pin29=VP_SYS_VS_Systick
Mcu.Pin3=PB1
Mcu.Pin30=VP_TIM2_VS_ClockSourceINT
Mcu.Pin4=PE7
Mcu.Pin5=PE10
Mcu.Pin6=PE11
Mcu.Pin7=PE12
Mcu.Pin8=PE13
Mcu.Pin9=PE14
Mcu.PinsNb=31
Mcu.ThirdPartyNb=0
Mcu.UserConstants=
Mcu.UserName=STM32F407VGTx
@@ -87,28 +75,16 @@ NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:false
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
PA0-WKUP.Locked=true
PA0-WKUP.Signal=GPIO_Input
PA1.Mode=RMII
PA1.Signal=ETH_REF_CLK
PA15.Locked=true
PA15.Signal=GPIO_Input
PA2.Mode=RMII
PA2.Signal=ETH_MDIO
PA5.Mode=Full_Duplex_Master
PA5.Signal=SPI1_SCK
PA7.Mode=RMII
PA7.Signal=ETH_CRS_DV
PB1.Locked=true
PB1.Signal=ADCx_IN9
PB10.GPIOParameters=GPIO_Speed
PB10.GPIO_Speed=GPIO_SPEED_FREQ_HIGH
PB10.Locked=true
PB10.Signal=GPIO_Output
PB11.Mode=RMII
PB11.Signal=ETH_TX_EN
PB12.Mode=RMII
PB12.Signal=ETH_TXD0
PB13.Mode=RMII
PB13.Signal=ETH_TXD1
PB4.Locked=true
PB4.Mode=Full_Duplex_Master
PB4.Signal=SPI1_MISO
@@ -122,16 +98,10 @@ PB7.Signal=GPIO_Output
PB9.Locked=true
PB9.Mode=I2C
PB9.Signal=I2C1_SDA
PC1.Mode=RMII
PC1.Signal=ETH_MDC
PC11.Locked=true
PC11.Signal=GPIO_Input
PC3.Locked=true
PC3.Signal=GPIO_Input
PC4.Mode=RMII
PC4.Signal=ETH_RXD0
PC5.Mode=RMII
PC5.Signal=ETH_RXD1
PC6.Locked=true
PC6.Signal=GPIO_Input
PC8.Locked=true