cant get blink to work with variant
Posted: Sat Aug 07, 2021 8:32 pm
I manually added a stm32f105x based board and I cant seem to get the blink example to complie/upload. I am using an stmlink v2 clone.
the board is a can bus filter found on aliexpress.
variant.h
variant.cpp
when i load up the blink example it complains that 'LED_BUILTIN' was not declared in this scope but when i explicitly define it in the sketch as PC_10 or '1', I receive:
what am I missing here?
i found a schematic for the board on https://dangerouspayload.com/2020/03/10 ... er-device/

the board is a can bus filter found on aliexpress.
variant.h
Code: Select all
/*
*******************************************************************************
* Copyright (c) 2019, STMicroelectronics
* All rights reserved.
*
* This software component is licensed by ST under BSD 3-Clause license,
* the "License"; You may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
* opensource.org/licenses/BSD-3-Clause
*
*******************************************************************************
*/
#ifndef ARDUINO_CANFILTER_STM32
#define ARDUINO_CANFILTER_STM32
#ifdef __cplusplus
extern "C" {
#endif // __cplusplus
#define HSE_VALUE 25000000U
//#define STM32F105xC
//#define DWT_DELAY_DISABLED
/*----------------------------------------------------------------------------
* Pins
*----------------------------------------------------------------------------*/
// Define pin names to match digital pin number --> Dx
// It could be used with preprocessor tests (e.g. #if PXn == 3)
// so an enum will not work.
// !!!
// !!! Copy the digitalPin[] array from the variant.cpp
// !!! and remove all '_': PX_n --> PXn
// !!! For NC, comment the line to warn x pin number is NC
// !!! // x is NC
// !!! For duplicated pin name, comment the line to warn x pin number
// !!! is PXn which is already defined with y pin number
// !!! // x is PXn (y)
// !!! Ex:
// !!! ...
// !!! #define PA4 20 // A14 <-- if NUM_ANALOG_FIRST not defined
// !!! or
// !!! #define PA4 A14 // 20 <-- if NUM_ANALOG_FIRST defined
// !!! #define PB4 21
// !!! #define PB5 22
// !!! #define PB3 23
// !!! // 24 is PA4 (20)
// !!! // 25 is PB4 (21)
// !!! #define PA2 26 // A15 <-- if NUM_ANALOG_FIRST not defined
// !!! or
// !!! #define PA2 A15 // 26 <-- if NUM_ANALOG_FIRST defined
// !!! ...
//#define PXn x
#define PA15 0
#define PC10 1
#define PC11 2
#define PC12 3
// This must be a literal
// It is used with preprocessor tests (e.g. #if NUM_DIGITAL_PINS > 3)
// so an enum will not work.
#define NUM_DIGITAL_PINS 3
// Allow to define Arduino style alias for analog input pin number --> Ax
// If no analog pin required then NUM_ANALOG_INPUTS could not be defined
// or set to `0`
// All pins are digital, analog inputs are a subset of digital pins.
// This must be a literal
// It is used with preprocessor tests (e.g. #if NUM_ANALOG_INPUTS > 3)
// so an enum will not work.
// !!!
// !!! It must be aligned with the number of analog PinName
// !!! defined in digitalPin[] array in variant.cpp
// !!!
#define NUM_ANALOG_INPUTS 0
// They are 2 possibles way to define analog pins:
//-------------------------------------------------------------------------------------------
// - If they are contiguous in the digitalPin array:
// Simply defined `NUM_ANALOG_FIRST` and all pins Ax will be automatically defined.
// It define the digital pin number of the first analog input (i.e. which digital pin is A0)
// First analog pin value (A0) must be greater than or equal to NUM_ANALOG_INPUTS
// This must be a literal with a value less than or equal to MAX_ANALOG_INPUTS
// defined in pin_arduino.h
#define NUM_ANALOG_FIRST 0
//------------------------------------OR------------------------------------------------------
// - If they are not contiguous in the digitalPin array:
// Add an analogInputPin array in the variant.cpp without defining NUM_ANALOG_FIRST
// In that case the defined PYn for analog pin have to define the Ax definition instead of
// index in digitalPin[] array:
// #define PA4 A14
//-------------------------------------------------------------------------------------------
// Below ADC and PWM definitions already done in the core
// Could be redefined here if needed
// ADC resolution is 10 bits
//#define ADC_RESOLUTION 10
// PWM resolution
//#define PWM_RESOLUTION 8
//#define PWM_FREQUENCY 1000
//#define PWM_MAX_DUTY_CYCLE 255
// On-board LED pin number
#define LED_BUILTIN PC10
#define LED_GREEN LED_GREEN
// On-board user button
#define USER_BTN 0
// Below SPI and I2C definitions already done in the core
// Could be redefined here if differs from the default one
// SPI Definitions
//#define PIN_SPI_SS 10 // Default for Arduino connector compatibility
//#define PIN_SPI_MOSI 11 // Default for Arduino connector compatibility
//#define PIN_SPI_MISO 12 // Default for Arduino connector compatibility
//#define PIN_SPI_SCK 13 // Default for Arduino connector compatibility
// I2C Definitions
//#define PIN_WIRE_SDA 14 // Default for Arduino connector compatibility
//#define PIN_WIRE_SCL 15 // Default for Arduino connector compatibility
// I2C timing definitions (optional), avoid time spent to compute if defined
// * I2C_TIMING_SM for Standard Mode (100kHz)
// * I2C_TIMING_FM for Fast Mode (400kHz)
// * I2C_TIMING_FMP for Fast Mode Plus (1000kHz)
//#define I2C_TIMING_SM 0x00000000
//#define I2C_TIMING_FM 0x00000000
//#define I2C_TIMING_FMP 0x00000000
// Timer Definitions (optional)
// Use TIM6/TIM7 when possible as servo and tone don't need GPIO output pin
#define TIMER_TONE TIM6
#define TIMER_SERVO TIM7
// UART Definitions
// Define here Serial instance number to map on Serial generic name
#define SERIAL_UART_INSTANCE 0 //ex: 2 for Serial2 (USART2)
// DEBUG_UART could be redefined to print on another instance than 'Serial'
//#define DEBUG_UART ((USART_TypeDef *) U(S)ARTX) // ex: USART3
// DEBUG_UART baudrate, default: 9600 if not defined
//#define DEBUG_UART_BAUDRATE x
// DEBUG_UART Tx pin name, default: the first one found in PinMap_UART_TX for DEBUG_UART
//#define DEBUG_PINNAME_TX PX_n // PinName used for TX
// Default pin used for 'Serial' instance (ex: ST-Link)
// Mandatory for Firmata
#define PIN_SERIAL_RX x
#define PIN_SERIAL_TX x
// Optional PIN_SERIALn_RX and PIN_SERIALn_TX where 'n' is the U(S)ART number
// Used when user instanciate a hardware Serial using its peripheral name.
// Example: HardwareSerial mySerial(USART3);
// will use PIN_SERIAL3_RX and PIN_SERIAL3_TX if defined.
//#define PIN_SERIALn_RX x // For U(S)ARTn RX
//#define PIN_SERIALn_TX x // For U(S)ARTn TX
//#define PIN_SERIALLP1_RX x // For LPUART1 RX
//#define PIN_SERIALLP1_TX x // For LPUART1 TX
// SD card slot Definitions
// SD detect signal can be defined if required
//#define SD_DETECT_PIN x
// SD Read/Write timeout, default value defined in STM32SD library
//#define SD_DATATIMEOUT x
#ifdef __cplusplus
} // extern "C"
#endif
/*----------------------------------------------------------------------------
* Arduino objects - C++ only
*----------------------------------------------------------------------------*/
#ifdef __cplusplus
// These serial port names are intended to allow libraries and architecture-neutral
// sketches to automatically default to the correct port name for a particular type
// of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN,
// the first hardware serial port whose RX/TX pins are not dedicated to another use.
//
// SERIAL_PORT_MONITOR Port which normally prints to the Arduino Serial Monitor
//
// SERIAL_PORT_USBVIRTUAL Port which is USB virtual serial
//
// SERIAL_PORT_LINUXBRIDGE Port which connects to a Linux system via Bridge library
//
// SERIAL_PORT_HARDWARE Hardware serial port, physical RX & TX pins.
//
// SERIAL_PORT_HARDWARE_OPEN Hardware serial ports which are open for use. Their RX & TX
// pins are NOT connected to anything by default.
#define SERIAL_PORT_MONITOR Serial
#define SERIAL_PORT_HARDWARE Serial
#endif
#endif /* _VARIANT_ARDUINO_STM32_ */
Code: Select all
/*
*******************************************************************************
* Copyright (c) 2019, STMicroelectronics
* All rights reserved.
*
* This software component is licensed by ST under BSD 3-Clause license,
* the "License"; You may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
* opensource.org/licenses/BSD-3-Clause
*
*******************************************************************************
*/
#include "pins_arduino.h"
#ifdef __cplusplus
extern "C" {
#endif
// Digital PinName array
// This array allows to wrap Arduino pin number(Dx or x)
// to STM32 PinName (PX_n)
const PinName digitalPin[] = {
//PX_n, //Dx
PA_15, //D0
PC_10, //D1
PC_11, //D2
PC_12 //D3
};
#ifdef __cplusplus
}
#endif
// ----------------------------------------------------------------------------
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief System Clock Configuration
* @retval None
*/
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
/** Initializes the CPU, AHB and APB busses clocks
*/
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV5;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.Prediv1Source = RCC_PREDIV1_SOURCE_PLL2;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
RCC_OscInitStruct.PLL2.PLL2State = RCC_PLL2_ON;
RCC_OscInitStruct.PLL2.PLL2MUL = RCC_PLL2_MUL8;
RCC_OscInitStruct.PLL2.HSEPrediv2Value = RCC_HSE_PREDIV2_DIV5;
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_DIV2;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
{
Error_Handler();
}
/** Configure the Systick interrupt time
*/
__HAL_RCC_PLLI2S_ENABLE();
}
#ifdef __cplusplus
}
#endif
Code: Select all
/Users/marric.murray/Library/Arduino15/packages/STMicroelectronics/hardware/stm32/2.0.0/cores/arduino/pins_arduino.c: In function 'pinNametoDigitalPin':
/Users/marric.murray/Library/Arduino15/packages/STMicroelectronics/hardware/stm32/2.0.0/cores/arduino/pins_arduino.c:27:16: error: 'NUM_DIGITAL_PINS' undeclared (first use in this function)
27 | uint32_t i = NUM_DIGITAL_PINS;
| ^~~~~~~~~~~~~~~~
/Users/marric.murray/Library/Arduino15/packages/STMicroelectronics/hardware/stm32/2.0.0/cores/arduino/pins_arduino.c:27:16: note: each undeclared identifier is reported only once for each function it appears in
In file included from /Users/marric.murray/Library/Arduino15/packages/STMicroelectronics/hardware/stm32/2.0.0/cores/arduino/pins_arduino.c:19:
/Users/marric.murray/Library/Arduino15/packages/STMicroelectronics/hardware/stm32/2.0.0/cores/arduino/pins_arduino.c: In function 'analogInputToPinName':
/Users/marric.murray/Library/Arduino15/packages/STMicroelectronics/hardware/stm32/2.0.0/cores/arduino/pins_arduino.h:119:38: error: 'NUM_DIGITAL_PINS' undeclared (first use in this function)
119 | #define analogInputToDigitalPin(p) (NUM_DIGITAL_PINS)
| ^~~~~~~~~~~~~~~~
/Users/marric.murray/Library/Arduino15/packages/STMicroelectronics/hardware/stm32/2.0.0/cores/arduino/pins_arduino.h:103:51: note: in definition of macro 'digitalPinToPinName'
103 | #define digitalPinToPinName(p) ((((uint32_t)(p) & PNUM_MASK) < NUM_DIGITAL_PINS) ? \
| ^
/Users/marric.murray/Library/Arduino15/packages/STMicroelectronics/hardware/stm32/2.0.0/cores/arduino/pins_arduino.c:41:36: note: in expansion of macro 'analogInputToDigitalPin'
41 | PinName pn = digitalPinToPinName(analogInputToDigitalPin(pin));
| ^~~~~~~~~~~~~~~~~~~~~~~
In file included from /Users/marric.murray/Library/Arduino15/packages/STMicroelectronics/hardware/stm32/2.0.0/cores/arduino/Arduino.h:56,
from /Users/marric.murray/Library/Arduino15/packages/STMicroelectronics/hardware/stm32/2.0.0/cores/arduino/wiring_digital.c:19:
/Users/marric.murray/Library/Arduino15/packages/STMicroelectronics/hardware/stm32/2.0.0/cores/arduino/wiring_digital.c: In function 'pinMode':
/Users/marric.murray/Library/Arduino15/packages/STMicroelectronics/hardware/stm32/2.0.0/cores/arduino/pins_arduino.h:103:69: error: 'NUM_DIGITAL_PINS' undeclared (first use in this function)
103 | #define digitalPinToPinName(p) ((((uint32_t)(p) & PNUM_MASK) < NUM_DIGITAL_PINS) ? \
| ^~~~~~~~~~~~~~~~
/Users/marric.murray/Library/Arduino15/packages/STMicroelectronics/hardware/stm32/2.0.0/cores/arduino/wiring_digital.c:31:15: note: in expansion of macro 'digitalPinToPinName'
31 | PinName p = digitalPinToPinName(ulPin);
| ^~~~~~~~~~~~~~~~~~~
/Users/marric.murray/Library/Arduino15/packages/STMicroelectronics/hardware/stm32/2.0.0/cores/arduino/pins_arduino.h:103:69: note: each undeclared identifier is reported only once for each function it appears in
103 | #define digitalPinToPinName(p) ((((uint32_t)(p) & PNUM_MASK) < NUM_DIGITAL_PINS) ? \
| ^~~~~~~~~~~~~~~~
/Users/marric.murray/Library/Arduino15/packages/STMicroelectronics/hardware/stm32/2.0.0/cores/arduino/wiring_digital.c:31:15: note: in expansion of macro 'digitalPinToPinName'
31 | PinName p = digitalPinToPinName(ulPin);
| ^~~~~~~~~~~~~~~~~~~
In file included from /Users/marric.murray/Library/Arduino15/packages/STMicroelectronics/hardware/stm32/2.0.0/cores/arduino/Arduino.h:56,
from /Users/marric.murray/Library/Arduino15/packages/STMicroelectronics/hardware/stm32/2.0.0/cores/arduino/wiring_analog.c:19:
/Users/marric.murray/Library/Arduino15/packages/STMicroelectronics/hardware/stm32/2.0.0/cores/arduino/wiring_analog.c: In function 'analogWrite':
/Users/marric.murray/Library/Arduino15/packages/STMicroelectronics/hardware/stm32/2.0.0/cores/arduino/pins_arduino.h:103:69: error: 'NUM_DIGITAL_PINS' undeclared (first use in this function)
103 | #define digitalPinToPinName(p) ((((uint32_t)(p) & PNUM_MASK) < NUM_DIGITAL_PINS) ? \
| ^~~~~~~~~~~~~~~~
/Users/marric.murray/Library/Arduino15/packages/STMicroelectronics/hardware/stm32/2.0.0/cores/arduino/wiring_analog.c:187:15: note: in expansion of macro 'digitalPinToPinName'
187 | PinName p = digitalPinToPinName(ulPin);
| ^~~~~~~~~~~~~~~~~~~
/Users/marric.murray/Library/Arduino15/packages/STMicroelectronics/hardware/stm32/2.0.0/cores/arduino/pins_arduino.h:103:69: note: each undeclared identifier is reported only once for each function it appears in
103 | #define digitalPinToPinName(p) ((((uint32_t)(p) & PNUM_MASK) < NUM_DIGITAL_PINS) ? \
| ^~~~~~~~~~~~~~~~
/Users/marric.murray/Library/Arduino15/packages/STMicroelectronics/hardware/stm32/2.0.0/cores/arduino/wiring_analog.c:187:15: note: in expansion of macro 'digitalPinToPinName'
187 | PinName p = digitalPinToPinName(ulPin);
| ^~~~~~~~~~~~~~~~~~~
/Users/marric.murray/Library/Arduino15/packages/STMicroelectronics/hardware/stm32/2.0.0/cores/arduino/wiring_digital.c: In function 'digitalWrite':
/Users/marric.murray/Library/Arduino15/packages/STMicroelectronics/hardware/stm32/2.0.0/cores/arduino/pins_arduino.h:103:69: error: 'NUM_DIGITAL_PINS' undeclared (first use in this function)
103 | #define digitalPinToPinName(p) ((((uint32_t)(p) & PNUM_MASK) < NUM_DIGITAL_PINS) ? \
| ^~~~~~~~~~~~~~~~
/Users/marric.murray/Library/Arduino15/packages/STMicroelectronics/hardware/stm32/2.0.0/cores/arduino/wiring_digital.c:81:20: note: in expansion of macro 'digitalPinToPinName'
81 | digitalWriteFast(digitalPinToPinName(ulPin), ulVal);
| ^~~~~~~~~~~~~~~~~~~
/Users/marric.murray/Library/Arduino15/packages/STMicroelectronics/hardware/stm32/2.0.0/cores/arduino/wiring_digital.c: In function 'digitalRead':
/Users/marric.murray/Library/Arduino15/packages/STMicroelectronics/hardware/stm32/2.0.0/cores/arduino/pins_arduino.h:103:69: error: 'NUM_DIGITAL_PINS' undeclared (first use in this function)
103 | #define digitalPinToPinName(p) ((((uint32_t)(p) & PNUM_MASK) < NUM_DIGITAL_PINS) ? \
| ^~~~~~~~~~~~~~~~
/Users/marric.murray/Library/Arduino15/packages/STMicroelectronics/hardware/stm32/2.0.0/cores/arduino/wiring_digital.c:86:26: note: in expansion of macro 'digitalPinToPinName'
86 | return digitalReadFast(digitalPinToPinName(ulPin));
| ^~~~~~~~~~~~~~~~~~~
/Users/marric.murray/Library/Arduino15/packages/STMicroelectronics/hardware/stm32/2.0.0/cores/arduino/wiring_digital.c: In function 'digitalToggle':
/Users/marric.murray/Library/Arduino15/packages/STMicroelectronics/hardware/stm32/2.0.0/cores/arduino/pins_arduino.h:103:69: error: 'NUM_DIGITAL_PINS' undeclared (first use in this function)
103 | #define digitalPinToPinName(p) ((((uint32_t)(p) & PNUM_MASK) < NUM_DIGITAL_PINS) ? \
| ^~~~~~~~~~~~~~~~
/Users/marric.murray/Library/Arduino15/packages/STMicroelectronics/hardware/stm32/2.0.0/cores/arduino/wiring_digital.c:91:21: note: in expansion of macro 'digitalPinToPinName'
91 | digitalToggleFast(digitalPinToPinName(ulPin));
| ^~~~~~~~~~~~~~~~~~~
exit status 1
Error compiling for board Generic STM32F1 series.
i found a schematic for the board on https://dangerouspayload.com/2020/03/10 ... er-device/
