VEX Cortex

The VEX Cortex is the older microcontroller that was used in VRC and VEXU

This article is about the VEX Cortex, which is the legacy microcontroller for VRC and is no longer competitive

The VEX Cortex is the older microcontroller legal for use in VRC. It is a 32-bit ARM Cortex-M3 processor with support for PROS, Easyc, and Robotc. It features ten motor outputs which can deliver up to 8 A combined of current (12 A with a VEX Power Expander), twelve digital inputs/outputs, eight analog inputs, and three communication interfaces.


  • Well-shielded against environmental hazards

  • Input pins carry short-circuit and ESD protection

  • Compatible with the standard line of VEX Sensors and VEX Motors

  • Only microcontroller which is allowed to directly interface with actuators on the robot

  • High-speed, 32-bit ARM Cortex-M3 platform

  • Wireless communication and code download using VEXnet

  • Programmable in PROS, EasyC, or RobotC

  • Digital and analog pins are 5-volt tolerant

  • Code debugging (RobotC only)


  • RobotC interprets the user program, a substantial speed hit to the running program. EasyC and PROS do not have these issues

  • VEXnet communications can be lag-prone or inconsistent

  • Power consumption is higher than it could be

  • Large, yet does not break out all pins of the microcontroller core chip

  • Most powerful chip peripherals are unavailable


The VEX Cortex may be mounted in almost any orientation on the robot using 8/32" bolts. However, it is most convenient to have the ports facing upward and the power switch easily accessible. A USB extension cable should be used to relocate the VEXNet key away from potential sources of interference.

Since the VEX Cortex is the only microcontroller which can run actuators on the robot, all past robots have had one. As of VEX Gateway, the additional functionality of Midnight C (PROS) and more peripherals have been unlocked. PROS has been used to program the VEX Cortex since VEX Sack Attack.


If the VEX Cortex is not working properly, look at the three indicator lights on the Cortex microcontroller. The most common solution is restarting both the VEX Joystick and the Cortex; if the Cortex still fails to operate, downloading the firmware is probably the next step.






See below

Robot battery is dead

Red (fast flash)

See below

Backup battery low or unplugged

Red (slow flash)

See below

User code has crashed


See below

Robot battery is low

Green (slow flash)


Green (flickering)

Ready to download firmware If not intended, restart the Cortex


Red (slow flash)


Downloading firmware




VEXNet communications lost


Yellow (slow flash)


VEXNet initializing

Green or Green (+1 blink)



Tethered to PC or joystick


Green (fast flash)


User code running (no competition switch)




Driver control




Robot disabled, set competition switch to Enable

Green (fast flash)


Green (fast flash)

Autonomous mode


Green (slow flash)


Code download in progress If stuck in this state, restart the Cortex

Known issues

  • Motor ports provide little or no power - The battery is low, or too much power was drawn from the ports, tripping a Resettable Fuse (PTC). Wait a few minutes and try again, or disconnect some motors from the VEX Cortex to lighten the load.

  • Sensors not working properly - A backup battery should be connected to maintain power to sensors. Sensors work differently when the VEX Cortex is powered from a powered programming adapter or the orange USB A to A cable. Always test sensors with a VEX battery connected and in use.

  • Code download stops midway - Downloading large files exposes problems with VEXNet. Go through and optimize the program, or download using the USB tether instead of over wireless.

  • Cortex will not turn off - When a backup battery is connected, turn off the VEX Joystick first and allow the VEX Cortex to lose the connection before powering down to avoid this issue.

Download Firmware

If VEX releases a firmware update, or the Cortex is acting in an erratic manner, it is time to reflash the firmware. A valid copy of RobotC is required to reflash the RobotC Firmware; EasyC and Midnight C only requires a Mastercode update, which can be done without EasyC using the VEXnet Firmware Upgrade Utility.

  • Turn off the Cortex

  • Connect an orange USB A to A cable to the Cortex USB port and the PC

  • Use the appropriate Firmware Update command to reflash the new firmware:

    • RobotC: Use ''Robot > Download Firmware > ROBOTC Firmware > Standard File''

    • EasyC: Open the ''VEXnet Firmware Upgrade Utility'', select ''Bootload'', answer "Yes" to ''Start Boot Loader?'', and when prompted, click ''Upgrade''

    • PROS: Use ''VEX > Update Mastercode...'' (Windows only), select ''Bootload'', answer "Yes" to ''Start Boot Loader?'', and when prompted, click ''Upgrade''

  • When complete, unplug and restart the Cortex

External pinout

The VEX Cortex external pin layout


GPIO Pin Mapping

Inside of a VEX Cortex microcontroller

Ditto, bottom view

The digital, serial, I2C, and analog pins on the Cortex microcontroller are actually given different names by the microcontroller's registers. By mapping these GPIO pins with a test program, the following pin to port map was derived:

  • Digital 1 - PE9 (TIM1_CH1/FSMC_D6)

  • Digital 2 - PE11 (TIM1_CH2/FSMC_D8)

  • Digital 3 - PC6 (TIM3_CH1/I2S2_MCK/TIM8_CH1/SDIO_D6)

  • Digital 4 - PC7 (TIM3_CH2/I2S3_MCK/TIM8_CH2/SDIO_D7)

  • Digital 5 - PE13 (TIM1_CH3/FSMC_D10)

  • Digital 6 - PE14 (TIM1_CH4/FSMC_D11)

  • Digital 7 - PE8 (TIM1_CH1N/FSMC_D5)

  • Digital 8 - PE10 (TIM1_CH2N/FSMC_D7)

  • Digital 9 - PE12 (TIM1_CH3N/FSMC_D9)

  • Digital 10 - PE7 (TIM1_ETR/FSMC_D4)

  • Digital 11 - PD0 (CAN_RX/FSMC_D2/OSC_IN)

  • Digital 12 - PD1 (CAN_TX/FSMC_D3/OSC_OUT)



  • Analog 2 - PA1 (USART2_RTS/TIM5_CH2/TIM2_CH2/ADC_1)

  • Analog 3 - PA2 (USART2_TX/TIM5_CH3/TIM2_CH3/ADC_2)

  • Analog 4 - PA3 (USART2_RX/TIM5_CH4/TIM2_CH4/ADC_3)

  • Analog 5 - PC2 (ADC_12)

  • Analog 6 - PC3 (ADC_13)

  • Analog 7 - PC0 (ADC_10)

  • Analog 8 - PC1 (ADC_11)








By using the second UART peripheral, one can find its RX pin exposed on analog 4 and its TX pin exposed on analog 3. Its CK pin is also exposed on the SP pin. Combined, these pins form an SPI device, with MOSI on analog pin 3, MISO on analog pin 4, and SCK on the SP pin. CS can be performed by any free GPIO on the digital, analog, or communication ports.


The built-in I2C port is linked to I2C1 on its alternate pin mapping. It is used to connect to the VEX Motor Encoders. EasyC, RobotC, and PROS all support use of the port; only PROS allows connection of custom sensors such as gyros as well.

Since the I2C and UART ports are directly connected to the STM32 device without short-circuit or ESD protection resistors, they are more vulnerable to failure or lock-up than the regular Digital I/O. easyC and ROBOTC users of the VEX Motor Encoders have found that static built up from driving on the field can discharge through the motor casing and the IME chain into the Cortex, causing a possible lock-up and crash.

Other peripherals

A Digital-to-Analog Converter (DAC) peripheral is exposed on the speaker (SP) port. If this port is not being used for analog input or SPI, an analog voltage can be output on this pin. It ranges from about 0.1 to 3.2 V, but is high-impedance. For practical usage of this pin, an operational amplifier must be used to buffer the output.

Several of the built-in timer modules also have exposed capture/compare pins on the available outputs, possibly allowing a VEX Power Expander to run off of a digital port and increase the number of independent output signals. Sophisticated schemes for PWM output or pulse accumulation/width measurement can also be implemented.

External port details

The Crystal ports and Communications ports are connected directly to their outputs. However, Digital ports have a series 1 Kohm resistance to provide short-circuit protection and a 1 nF capacitor for decoupling, limiting their Slew Rate and Output Drive accordingly. Analog ports have a voltage divider which makes 5 V inputs safe for the 3.3 V ADC with a total input impedance of around 28 Kohms and an anti-aliasing 3dB bandwidth of 16 KHz. A weak pull-up in processor by default makes Digital inputs float high and Analog inputs idle at about 0.2 V. The Speaker port has a 100 ohm series resistor and no capacitor.

Teams Contributed to this Article:

  • BLRS (Purdue SIGBots)

Last updated


This work is licensed under a Attribution-ShareAlike 2.0 Generic License