Difference between revisions of "STM32F4 Discovery"

From PaparazziUAV
Jump to navigation Jump to search
Line 23: Line 23:
* LIS302DL MEMS 3 axis accelerometer on SPI1
* LIS302DL MEMS 3 axis accelerometer on SPI1


==Pinout==
== Pinout ==
[[Image:Stm32f4_discovery_left_bank.png|thumb|right|350px|left pin bank in relation to paparazzi]]
[[Image:Stm32f4_discovery_left_bank.png|thumb|right|300px|left pin bank in relation to paparazzi]]
[[Image:Stm32f4_discovery_right_bank.png|thumb|right|350px|right pin bank in relation to paparazzi]]
[[Image:Stm32f4_discovery_right_bank.png|thumb|right|300px|right pin bank in relation to paparazzi]]
The Discovery has a male 100 pin (2x25pin on both sides, also accessible on both sides of the pcb) pinout.  
The Discovery has a male 100 pin (2x25pin on both sides, also accessible on both sides of the pcb) pinout.  


===LED===
{|border="1"  cellspacing="0" style="text-align:center" cellpadding="2%" width="60%"
3 PD13 orange, above LIS302DL
|+'''LED'''
!width="7%"|''Pin #''!!width="10%"|''Name''!!width="10%"|''Type''!!''Description''!!width="5%"|''Color''
|-
|PD13||LED_3||I/O||above LIS302DL||style="background:orange; color:black"|Orange
|-
|PD12||LED_4||I/O||left of LIS302DL||style="background:green; color:black"|Green
|-
|PD14||LED_5||I/O||right of LIS302DL||style="background:red; color:black"|Red
|-
|PD15||LED_6||I/O||below LIS302DL||style="background:blue; color:black"|Blue
|-
|PA9||LED_9||I/O||same as USB power (VBUS), needs to be enabled in stm32f4_discovery.h ||style="background:green; color:black"|Green
|}


4 PD12 green, left of LIS302DL


5 PD14 red, right of LIS302DL


6 PD15 blue, below LIS302DL
{|border="1"  cellspacing="0" style="text-align:center" cellpadding="2%" width="60%"
|+'''UART1'''
!width="7%"|''Pin #''!!width="10%"|''Name''!!width="10%"|''Type''!!''Description''
|-
|PB6||UART1 TX||Out||UART1 Serial Output
|-
|PB7||UART1 RX||In||UART1 Serial Input
|}


9 PA9, same as USB power (VBUS), needs to be enabled in stm32f4_discovery.h


===UART===
{|border="1"  cellspacing="0" style="text-align:center" cellpadding="2%" width="60%"
* UART1
|+'''UART2'''
** TX PB6
!width="7%"|''Pin #''!!width="10%"|''Name''!!width="10%"|''Type''!!''Description''
** RX PB7
|-
|PD5||UART2 TX||Out||UART1 Serial Output
|-
|PD6||UART2 RX||In||UART1 Serial Input, also used for Spektrum input
|}


* UART2
** TX PD5
** RX PD6


* UART3
{|border="1"  cellspacing="0" style="text-align:center" cellpadding="2%" width="60%"
** TX PD8
|+'''UART3'''
** RX PD9
!width="7%"|''Pin #''!!width="10%"|''Name''!!width="10%"|''Type''!!''Description''
|-
|PD8||UART3 TX||Out||UART1 Serial Output
|-
|PD9||UART3 RX||In||UART1 Serial Input
|}


* UART4
** TX PC10
** RX PC11
Can not be used if SPI3 is active !


* UART5
{|border="1"  cellspacing="0" style="text-align:center" cellpadding="2%" width="60%"
** TX PC12
|+'''UART4 (Can NOT be used if SPI_3 is active!)'''
** RX PD2
!width="7%"|''Pin #''!!width="10%"|''Name''!!width="10%"|''Type''!!''Description''
Can not be used if SPI3 is active !
|-
|PC10||UART4 TX||Out||UART1 Serial Output
|-
|PC11||UART4 RX||In||UART1 Serial Input
|}


* UART6
** TX PC6
** RX PC7


===SPI===
{|border="1"  cellspacing="0" style="text-align:center" cellpadding="2%" width="60%"
* SPI1
|+'''UART5 (Can NOT be used if SPI_3 is active!)'''
** SCK PB3
!width="7%"|''Pin #''!!width="10%"|''Name''!!width="10%"|''Type''!!''Description''
** MISO PB4
|-
** MOSI PB5
|PC12||UART5 TX||Out||UART1 Serial Output
|-
|PD2||UART5 RX||In||UART1 Serial Input
|}


* SPI2
** SCK PB13
** MISO PB14
** MOSI PB15
Can not be used if PWM10 & PWM11 are active !


* SPI3
{|border="1"  cellspacing="0" style="text-align:center" cellpadding="2%" width="60%"
** SCK PC10
|+'''UART6'''
** MISO PC11
!width="7%"|''Pin #''!!width="10%"|''Name''!!width="10%"|''Type''!!''Description''
** MOSI PC12
|-
Can not be used if UART4 & UART5 are active !
|PC6||UART6 TX||Out||UART1 Serial Output
|-
|PC7||UART6 RX||In||UART1 Serial Input
|}


* SPI select Slave 0 PE2
* SPI select Slave 1 PE7


===I2C===
{|border="1"  cellspacing="0" style="text-align:center" cellpadding="2%" width="60%"
* I2C1
|+'''SPI1'''
** SCL PB8
!width="7%"|''Pin #''!!width="10%"|''Name''!!width="10%"|''Type''!!''Description''
** SDA PB9
|-
|PB3||SPI1 SCK||I/O||SPI1 Serial clock
|-
|PB4||SPI1 MISO||I/O||SPI1 Master In Slave Out
|-
|PB5||SPI1 MOSI||I/O||SPI1 Master Out Slave In
|}


* I2C2
** SCL PB10
** SDA PB11


* I2C3
{|border="1"  cellspacing="0" style="text-align:center" cellpadding="2%" width="60%"
** SCL PA8
|+'''SPI2 (Can NOT be used if PWM10 & PWM11 is active!)'''
** SDA PC9
!width="7%"|''Pin #''!!width="10%"|''Name''!!width="10%"|''Type''!!''Description''
I2C3 needs to be enabled in stm32f4_discovery.h
|-
|PB3||SPI2 SCK||I/O||SPI2 Serial clock
|-
|PB4||SPI2 MISO||I/O||SPI2 Master In Slave Out
|-
|PB5||SPI2 MOSI||I/O||SPI2 Master Out Slave In
|}


===ADC===
* ADC_1 PB1
* ADC_2 PC1
* ADC_3 PC4
* ADC_4 PA4 (used for BAT Voltge with voltage divider)


===PWM===
{|border="1"  cellspacing="0" style="text-align:center" cellpadding="2%" width="60%"
# PWM0 PE9
|+'''SPI3 (Can NOT be used if UART4 & UART5 is active!)'''
# PWM1 PE11
!width="7%"|''Pin #''!!width="10%"|''Name''!!width="10%"|''Type''!!''Description''
# PWM2 PE13
|-
# PWM3 PE14
|PB10||SPI3 SCK||I/O||SPI3 Serial clock
# PWM4 PE5
|-
# PWM5 PE6
|PB11||SPI3 MISO||I/O||SPI3 Master In Slave Out
# PWM6 PA3
|-
# PWM7 PA2
|PB12||SPI3 MOSI||I/O||SPI3 Master Out Slave In
# PWM8 PA1
|}
# PWM9 PA0
# PWM10 PB14 (Can not be used if SPI2 is active !)
# PWM11 PB15 (Can not be used if SPI2 is active !)


===PPM Input===
PA8


===Spektrum===
{|border="1"  cellspacing="0" style="text-align:center" cellpadding="2%" width="60%"
Bind pin PA8<br/>
|+'''SPI SS'''
Input UART2 PA10
!width="7%"|''Pin #''!!width="10%"|''Name''!!width="10%"|''Type''!!''Description''
|-
|PE2||SPI SS0||I/O||SPI Select Slave0
|-
|P"7||SPI SS1||I/O||SPI Select Slave1
|}


===Jumper===
====pin jumper====
* JP1 current consumption of the MCU can be measured here
* CN3 set: STLinkV2 is connected to onboard MCU, unset: STLinkV2 is only connected to SWD header to program external MCU


====solder jumper====
{|border="1"  cellspacing="0" style="text-align:center" cellpadding="2%" width="60%"
* SB17 bypass for JP1
|+'''I2C1'''
close this, if JP1 gets loose due vibrations, the MCU will not be supplied with power and the UAV WILL crash !
!width="7%"|''Pin #''!!width="10%"|''Name''!!width="10%"|''Type''!!''Description''
|-
|PB8||I2C1 SCL||I/O||I2C1 Serial Clock
|-
|PB9||I2C1 SDA||I/O||I2C1 Serial Data
|}
 
 
{|border="1"  cellspacing="0" style="text-align:center" cellpadding="2%" width="60%"
|+'''I2C2'''
!width="7%"|''Pin #''!!width="10%"|''Name''!!width="10%"|''Type''!!''Description''
|-
|PB10||I2C2 SCL||I/O||I2C2 Serial Clock
|-
|PB11||I2C2 SDA||I/O||I2C2 Serial Data
|}
 
 
{|border="1"  cellspacing="0" style="text-align:center" cellpadding="2%" width="60%"
|+'''I2C3 (Can NOT be used if Spektrum bind / PPM input is active!)'''
!width="7%"|''Pin #''!!width="10%"|''Name''!!width="10%"|''Type''!!''Description''
|-
|PA8||I2C3 SCL||I/O||I2C3 Serial Clock
|-
|PC9||I2C3 SDA||I/O||I2C3 Serial Data
|}
Note: is disabled in stm32f4discovery.h, PA8 is used as Spektrum bind pin, PC9 is used as PPM input
 
 
{|border="1"  cellspacing="0" style="text-align:center" cellpadding="2%" width="60%"
|+'''ADC'''
!width="7%"|''Pin #''!!width="10%"|''Name''!!width="10%"|''Type''!!''Description''
|-
|PB1||AUX1||I/O||ADC_1
|-
|PC1||AUX2||I/O||ADC_2
|-
|PC4||AUX3||I/O||ADC_3
|-
|PA4||BATT||I/O||ADC_4, is used for Battery voltage
|}
 
 
{|border="1"  cellspacing="0" style="text-align:center" cellpadding="2%" width="60%"
|+'''PWM'''
!width="7%"|''Pin #''!!width="10%"|''Name''!!width="10%"|''Type''!!''Description''
|-
|PE9||PWM0||Out||Servo 1
|-
|PE11||PWM1||Out||Servo 2
|-
|PE13||PWM2||Out||Servo 3
|-
|PE13||PWM3||Out||Servo 4
|-
|PE5||PWM4||Out||Servo 5
|-
|PE6||PWM5||Out||Servo 6
|-
|PA3||PWM6||Out||Servo 7
|-
|PA2||PWM7||Out||Servo 8
|-
|PA1||PWM8||Out||Servo 9
|-
|PA0||PWM9||Out||Servo 10
|-
|PB14||PWM10||Out||Servo 11, Can not be used if SPI2 is active
|-
|PB15||PWM11||Out||Servo 12, Can not be used if SPI2 is active
|}
 
 
{|border="1"  cellspacing="0" style="text-align:center" cellpadding="2%" width="60%"
|+'''PPM'''
!width="7%"|''Pin #''!!width="10%"|''Name''!!width="10%"|''Type''!!''Description''
|-
|PC9||PPM||In||PPM input
|}
 
 
=== Jumper ===
 
{|border="1"  cellspacing="0" style="text-align:center" cellpadding="2%" width="60%"
|+'''Jumper'''
!width="7%"|''Pin #''!!width="10%"|''Name''!!width="10%"|''Type''!!''Description''
|-
|JP1||JP1||Switch||MCU Current can be measured here
|-
|CN3||CN3||Switch||closed: STLinkV2 is connected to onboard MCU, open: is not connectec to onboard, only external header
|}
 
 
{|border="1"  cellspacing="0" style="text-align:center" cellpadding="2%" width="60%"
|+'''Soolder Jumper'''
!width="7%"|''Pin #''!!width="10%"|''Name''!!width="10%"|''Type''!!''Description''
|-
|SB17||SB17||Switch||Bypass for JP1, close this for security ! (if JP1 gets loose)
|}


==Firmware Flashing==
==Firmware Flashing==

Revision as of 13:47, 11 January 2014

This page is for the STM32F4 Discovery board with STM32F407VGT6, STM32F4 Disco is a familiar board with STM32F401VCT6, do not use this Files for the Disco board !

Stm32f4-discovery.jpg


Overview

  • STMicroelectronics STM32F4VGT6 Cortex M4 MCU, up to 168Mhz with floating point unit (FPU), 192 KB RAM, 1024 KB Flash
  • on-board STLinkv2 with SWD header (capable of programming itself or an external MCU)
  • ob-board power regulator for the MCU (3V or 5V Input)
  • 1 x user push button
  • 4(5) x LED (orange, green, red, blue, green)
  • 6 x UART (UART1, UART2, UART3, UART4, UART5, UART6)
  • 3 x SPI (SPI1, SPI2, SPI3)
  • 2(3) x I2C (I2C1, I2C2, (I2C3))
  • 1 x PPM input
  • 4 x ADC input, which one is used for bat voltage
  • 97 x 66 mm PCB
  • 4 x status LED (USB red, USB green, power, USB OTG green, USB OTG red)
  • LIS302DL MEMS 3 axis accelerometer on SPI1

Pinout

left pin bank in relation to paparazzi
right pin bank in relation to paparazzi

The Discovery has a male 100 pin (2x25pin on both sides, also accessible on both sides of the pcb) pinout.

LED
Pin # Name Type Description Color
PD13 LED_3 I/O above LIS302DL Orange
PD12 LED_4 I/O left of LIS302DL Green
PD14 LED_5 I/O right of LIS302DL Red
PD15 LED_6 I/O below LIS302DL Blue
PA9 LED_9 I/O same as USB power (VBUS), needs to be enabled in stm32f4_discovery.h Green


UART1
Pin # Name Type Description
PB6 UART1 TX Out UART1 Serial Output
PB7 UART1 RX In UART1 Serial Input


UART2
Pin # Name Type Description
PD5 UART2 TX Out UART1 Serial Output
PD6 UART2 RX In UART1 Serial Input, also used for Spektrum input


UART3
Pin # Name Type Description
PD8 UART3 TX Out UART1 Serial Output
PD9 UART3 RX In UART1 Serial Input


UART4 (Can NOT be used if SPI_3 is active!)
Pin # Name Type Description
PC10 UART4 TX Out UART1 Serial Output
PC11 UART4 RX In UART1 Serial Input


UART5 (Can NOT be used if SPI_3 is active!)
Pin # Name Type Description
PC12 UART5 TX Out UART1 Serial Output
PD2 UART5 RX In UART1 Serial Input


UART6
Pin # Name Type Description
PC6 UART6 TX Out UART1 Serial Output
PC7 UART6 RX In UART1 Serial Input


SPI1
Pin # Name Type Description
PB3 SPI1 SCK I/O SPI1 Serial clock
PB4 SPI1 MISO I/O SPI1 Master In Slave Out
PB5 SPI1 MOSI I/O SPI1 Master Out Slave In


SPI2 (Can NOT be used if PWM10 & PWM11 is active!)
Pin # Name Type Description
PB3 SPI2 SCK I/O SPI2 Serial clock
PB4 SPI2 MISO I/O SPI2 Master In Slave Out
PB5 SPI2 MOSI I/O SPI2 Master Out Slave In


SPI3 (Can NOT be used if UART4 & UART5 is active!)
Pin # Name Type Description
PB10 SPI3 SCK I/O SPI3 Serial clock
PB11 SPI3 MISO I/O SPI3 Master In Slave Out
PB12 SPI3 MOSI I/O SPI3 Master Out Slave In


SPI SS
Pin # Name Type Description
PE2 SPI SS0 I/O SPI Select Slave0
P"7 SPI SS1 I/O SPI Select Slave1


I2C1
Pin # Name Type Description
PB8 I2C1 SCL I/O I2C1 Serial Clock
PB9 I2C1 SDA I/O I2C1 Serial Data


I2C2
Pin # Name Type Description
PB10 I2C2 SCL I/O I2C2 Serial Clock
PB11 I2C2 SDA I/O I2C2 Serial Data


I2C3 (Can NOT be used if Spektrum bind / PPM input is active!)
Pin # Name Type Description
PA8 I2C3 SCL I/O I2C3 Serial Clock
PC9 I2C3 SDA I/O I2C3 Serial Data

Note: is disabled in stm32f4discovery.h, PA8 is used as Spektrum bind pin, PC9 is used as PPM input


ADC
Pin # Name Type Description
PB1 AUX1 I/O ADC_1
PC1 AUX2 I/O ADC_2
PC4 AUX3 I/O ADC_3
PA4 BATT I/O ADC_4, is used for Battery voltage


PWM
Pin # Name Type Description
PE9 PWM0 Out Servo 1
PE11 PWM1 Out Servo 2
PE13 PWM2 Out Servo 3
PE13 PWM3 Out Servo 4
PE5 PWM4 Out Servo 5
PE6 PWM5 Out Servo 6
PA3 PWM6 Out Servo 7
PA2 PWM7 Out Servo 8
PA1 PWM8 Out Servo 9
PA0 PWM9 Out Servo 10
PB14 PWM10 Out Servo 11, Can not be used if SPI2 is active
PB15 PWM11 Out Servo 12, Can not be used if SPI2 is active


PPM
Pin # Name Type Description
PC9 PPM In PPM input


Jumper

Jumper
Pin # Name Type Description
JP1 JP1 Switch MCU Current can be measured here
CN3 CN3 Switch closed: STLinkV2 is connected to onboard MCU, open: is not connectec to onboard, only external header


Soolder Jumper
Pin # Name Type Description
SB17 SB17 Switch Bypass for JP1, close this for security ! (if JP1 gets loose)

Firmware Flashing

FLASH_MODE=DFU is set as default

STM32F4 Discovery can mainly be programmed in two different ways:

DFU

  • with the MCU native (embedded in rom) DFU USB bootloader over the micro USB AB connector
  • required hardware: USB to micro and USB to mini usb cable
  • required external software: dfu-util
  • push MCU in DFU mode: connect mini and micro USB to PC, connect pin BOOT0 with 3V (if it doesnt work also BOOT1 (PB2) with GND), press reset button(LED LD7 should light up now), disconnect BOOT0 to 3V
  • more information: DFU page

SWD

  • with onboard STLinkV2 over SWD
  • required hardware: usb to mini USB cable
  • required software: st_flash and st_util from Texane
  • more information: STLink page