Page 1 of 2
Working with Netduino Plus 2 - clock for ENC28J60
Posted: Wed Nov 23, 2022 5:45 pm
by jarwil
Hello!
I want to enable ethernet on Netduino Plus 2 board but I do not know how to setup output port A8 as a clock 25MHz.
The problem is because on Netduino Plus 2 board ENC28J60 does not have own oscillator. Instead of the clock signal from MCO1 was used.
Another problem is MISO connected to PB4 and SS connected to PC8 but I think I can change it in ENC28J60Network.h
Is there anyone who can help me enable clock on PA8?
Thank you in advance.
Re: Working with Netduino Plus 2 - clock for ENC28J60
Posted: Thu Nov 24, 2022 1:33 am
by ozcar
From a quick look there does not seem to be a board definition for that, so you might have to create one yourself.
Have a look here:
https://github.com/stm32duino/wiki/wiki ... 28board%29.
The board appears to have a 25MHz crystal, so you want to set up the clock config for that. There might be some decisions to make there, or maybe you can find somewhere how it was set up for .NET (something I know nothing about).
For the MCO part, I think this should do what you want (but TBH, the only time I needed to setup MCO I just wrote directly to the registers).
Code: Select all
HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_HSE, RCC_MCODIV_1);
Re: Working with Netduino Plus 2 - clock for ENC28J60
Posted: Thu Nov 24, 2022 10:02 pm
by jarwil
Thank you.
Probably this is what I am looking for but it's not working right now
I read that the generic boards (I am using Generic STM32F4 series > Generic F405RGTx) have internal clock enabled so probably for this reason I have noisy wave on PA8.
When I change second parameter to RCC_MCO1SOURCE_HSI I can get 16MHz square waveform.
Now I am reading how to change the internal clock to external crystal oscillator and I am trying add a new variant.
Re: Working with Netduino Plus 2 - clock for ENC28J60
Posted: Thu Nov 24, 2022 11:13 pm
by jarwil
I am stuck. I don't know how to use the STM32CubeMX tool. Anyone can support me configure the external crystal for board Netduino Plus 2?
Re: Working with Netduino Plus 2 - clock for ENC28J60
Posted: Fri Nov 25, 2022 10:09 am
by ozcar
I see there is at least one existing F4 board with 25MHz HSE, called "Blue F407VET mini".
Perhaps you could try with the generic F405GTx board definition, with SystemClock_Config() copied into your sketch from
https://github.com/stm32duino/Arduino_C ... E_MINI.cpp
Take the WEAK off that and replace it with extern "C" as mentioned at the bottom of this page:
https://github.com/stm32duino/wiki/wiki ... ock_config
Re: Working with Netduino Plus 2 - clock for ENC28J60
Posted: Fri Nov 25, 2022 8:49 pm
by jarwil
Taa daaaaa!!!

- ping.png (6.22 KiB) Viewed 3386 times
Thank you ozcar!
At PA8 now I have beautiful sinus 25MHz.
Success is but my satisfaction is about 95%
At this time I had to change MISO to PB4 and CS to PC8
I have tried to do it like this in my sketch:
Code: Select all
SPI = SPIClass(PA7, PB4, PA5, PC8);
SPI.begin(PC8);
and also like this:
Code: Select all
SPI.setMISO(PB4);
SPI.setMOSI(PA7);
SPI.setSCLK(PA5);
SPI.setSSEL(PC8);
without success
In the end, I did it in a very inelegant way.
I changed the MISO directly in SPI library (SPI.cpp file)
Code: Select all
SPIClass::SPIClass() : _CSPinConfig(NO_CONFIG)
{
_spi.pin_miso = digitalPinToPinName(PB4); //MISO);
_spi.pin_mosi = digitalPinToPinName(MOSI);
_spi.pin_sclk = digitalPinToPinName(SCK);
_spi.pin_ssel = NC;
}
and PC8 I setup in my *.ino file
It's not clear to me why the above two methods I tried don't work (with SPI=... and SPI.set...)
Re: Working with Netduino Plus 2 - clock for ENC28J60
Posted: Sat Nov 26, 2022 6:03 pm
by jarwil
I read the SPI API manual and now everything is clear.
https://github.com/stm32duino/wiki/wiki ... unctions-1 I shouldn't set SSEL pin.
To sum up, to run ethernet on Netduino Plus 2 it is necessary:
1. set the clock
Code: Select all
extern "C" void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {};
/**Configure the main internal regulator output voltage
*/
__HAL_RCC_PWR_CLK_ENABLE();
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
/**Initializes the CPU, AHB and APB busses clocks
*/
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLM = 25;
RCC_OscInitStruct.PLL.PLLN = 336;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
RCC_OscInitStruct.PLL.PLLQ = 7;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
Error_Handler();
}
/**Initializes the CPU, AHB and APB busses clocks
*/
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK
| RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK) {
Error_Handler();
}
/* Ensure CCM RAM clock is enabled */
__HAL_RCC_CCMDATARAMEN_CLK_ENABLE();
}
2. set PA8 as clock for enc28J60
3. set the pins for SPI
Code: Select all
void setup()
{
//clock setup
//SystemClock_Config(); (extern)
//PA8 as clock for enc28J60
HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_HSE, RCC_MCODIV_1);
//PB4 as MISO
SPI.setMISO(PB4);
//PC8 as chip sellect
Ethernet.init(PC8);
//start ethernet
Ethernet.begin(mac, Eth_ModuleIP);
}
Re: Working with Netduino Plus 2 - clock for ENC28J60
Posted: Sat Nov 26, 2022 7:26 pm
by ozcar
Good that you got it working.
I would have thought that your SystemClock_Config() would get used anyway without you having to call it from setup() though.
Re: Working with Netduino Plus 2 - clock for ENC28J60
Posted: Sat Nov 26, 2022 10:22 pm
by jarwil
I have never use the extern declaration.
Thank you - now I know how it works.
Re: Working with Netduino Plus 2 - clock for ENC28J60
Posted: Sun Nov 27, 2022 12:05 am
by jarwil
I'll have to dig into the clock setup.
Using the millis() function to count the time, it turns out that 1s is actually 327ms.
As a result, libraries that use the millis() and micros() functions (for sensor DHT22 and for RC5) do not work.
Above proportion similar to 25000000 and 8000000
Should I change 8000000 to 25000000 in any other file? Something tells me that somewhere I should change HSE_VALUE.