STM32L-Discovery LCD driver is code compele but untested

This commit is contained in:
Gregory Nutt 2013-05-23 15:23:29 -06:00
parent bc170f11b4
commit a189ccebe5
5 changed files with 1045 additions and 189 deletions

View File

@ -1,22 +1,22 @@
README README
====== ======
This README discusses issues unique to NuttX configurations for the This README discusses issues unique to NuttX configurations for the
STMicro STM32L-Discovery development board. The STM32L-Discovery board STMicro STM32L-Discovery development board. The STM32L-Discovery board
is based on the STM32L152RBT6 MCU (128KB FLASH and 16KB of SRAM). is based on the STM32L152RBT6 MCU (128KB FLASH and 16KB of SRAM).
The STM32L-Discovery and 32L152CDISCOVERY kits are functionally The STM32L-Discovery and 32L152CDISCOVERY kits are functionally
equivalent. The difference is the internal Flash memory size (STM32L152RBT6 equivalent. The difference is the internal Flash memory size (STM32L152RBT6
with 128 Kbytes or STM32L152RCT6 with 256 Kbytes). with 128 Kbytes or STM32L152RCT6 with 256 Kbytes).
Both boards feature: Both boards feature:
- An ST-LINK/V2 embedded debug tool interface, - An ST-LINK/V2 embedded debug tool interface,
- LCD (24 segments, 4 commons), - LCD (24 segments, 4 commons),
- LEDs, - LEDs,
- Pushbuttons, - Pushbuttons,
- A linear touch sensor, and - A linear touch sensor, and
- Four touchkeys. - Four touchkeys.
Contents Contents
======== ========
@ -395,107 +395,114 @@ NXFLAT Toolchain
LEDs LEDs
==== ====
The STM32L-Discovery board has four LEDs. Two of these are controlled by The STM32L-Discovery board has four LEDs. Two of these are controlled by
logic on the board and are not available for software control: logic on the board and are not available for software control:
LD1 COM: LD2 default status is red. LD2 turns to green to indicate that LD1 COM: LD2 default status is red. LD2 turns to green to indicate
communications are in progress between the PC and the ST-LINK/V2. that communications are in progress between the PC and the
LD2 PWR: Red LED indicates that the board is powered. ST-LINK/V2.
LD2 PWR: Red LED indicates that the board is powered.
And two LEDs can be controlled by software: And two LEDs can be controlled by software:
User LD3: Green LED is a user LED connected to the I/O PB7 of the STM32L152 User LD3: Green LED is a user LED connected to the I/O PB7 of the
MCU. STM32L152 MCU.
User LD4: Blue LED is a user LED connected to the I/O PB6 of the STM32L152 User LD4: Blue LED is a user LED connected to the I/O PB6 of the
MCU. STM32L152 MCU.
These LEDs are not used by the board port unless CONFIG_ARCH_LEDS is These LEDs are not used by the board port unless CONFIG_ARCH_LEDS is
defined. In that case, the usage by the board port is defined in defined. In that case, the usage by the board port is defined in
include/board.h and src/up_leds.c. The LEDs are used to encode OS-related include/board.h and src/up_leds.c. The LEDs are used to encode OS-related
events as follows: events as follows:
SYMBOL Meaning LED state SYMBOL Meaning LED state
LED3 LED4 LED3 LED4
------------------- ----------------------- -------- -------- ------------------- ----------------------- -------- --------
LED_STARTED NuttX has been started OFF OFF LED_STARTED NuttX has been started OFF OFF
LED_HEAPALLOCATE Heap has been allocated OFF OFF LED_HEAPALLOCATE Heap has been allocated OFF OFF
LED_IRQSENABLED Interrupts enabled OFF OFF LED_IRQSENABLED Interrupts enabled OFF OFF
LED_STACKCREATED Idle stack created ON OFF LED_STACKCREATED Idle stack created ON OFF
LED_INIRQ In an interrupt No change LED_INIRQ In an interrupt No change
LED_SIGNAL In a signal handler No change LED_SIGNAL In a signal handler No change
LED_ASSERTION An assertion failed No change LED_ASSERTION An assertion failed No change
LED_PANIC The system has crashed OFF Blinking LED_PANIC The system has crashed OFF Blinking
LED_IDLE STM32 is is sleep mode Not used LED_IDLE STM32 is is sleep mode Not used
Serial Console Serial Console
============== ==============
The STM32L-Discovery has no on-board RS-232 driver. Further, there are no The STM32L-Discovery has no on-board RS-232 driver. Further, there are no
USART pins that do not conflict with the on board resources, in particular, USART pins that do not conflict with the on board resources, in particular,
the LCD: Most USART pins are available if the LCD is enabled; USART2 may be the LCD: Most USART pins are available if the LCD is enabled; USART2 may
used if either the LCD or the on-board LEDs are disabled. be used if either the LCD or the on-board LEDs are disabled.
PA9 USART1_TX LCD glass COM1 P2, pin 22 PA9 USART1_TX LCD glass COM1 P2, pin 22
PA10 USART1_RX LCD glass COM2 P2, pin 21 PA10 USART1_RX LCD glass COM2 P2, pin 21
PB6 USART1_TX LED Blue P2, pin 8 PB6 USART1_TX LED Blue P2, pin 8
PB7 USART1_RX LED Green P2, pin 7 PB7 USART1_RX LED Green P2, pin 7
PA2 USART2_TX LCD SEG1 P1, pin 17 PA2 USART2_TX LCD SEG1 P1, pin 17
PA3 USART2_RX LCD SEG2 P1, pin 18 PA3 USART2_RX LCD SEG2 P1, pin 18
PB10 USART3_TX LCD SEG6 P1, pin 22 PB10 USART3_TX LCD SEG6 P1, pin 22
PB11 USART3_RX LCD SEG7 P1, pin 23 PB11 USART3_RX LCD SEG7 P1, pin 23
PC10 USART3_TX LCD SEG22 P2, pin 15 PC10 USART3_TX LCD SEG22 P2, pin 15
PC11 USART3_RX LCD SEG23 P2, pin 14 PC11 USART3_RX LCD SEG23 P2, pin 14
GND and (external) 5V are available on both P1 and P2. Note: These signals NOTES:
may be at lower voltage levels and, hence, may not properly drive an external
RS-232 transceiver.
NOTE: The crystal X3 is not installed on the STM32L3-Discovery. As a - GND and (external) 5V are available on both P1 and P2. Note: These
result, the HSE clock is not availabled and the less acurate HSI must be signals may be at lower voltage levels and, hence, may not properly
used. This may limit the accuracy of the computed baud, especially at drive an external RS-232 transceiver.
higher BAUD. The HSI is supposedly calibrated in the factory to within 1%
at room temperatures so perhaps this not a issue.
I have had no problems using the USART1 with PA9 and PA10 with a 3.3-5V - The crystal X3 is not installed on the STM32L3-Discovery. As a result,
RS-232 transceiver module at 57600 baud. I have not tried higher baud rates. the HSE clock is not availabled and the less acurate HSI must be used.
This may limit the accuracy of the computed baud, especially at higher
BAUD. The HSI is supposedly calibrated in the factory to within 1% at
room temperatures so perhaps this not a issue.
There is no support for a USB serial connector on the STM32L-Discovery board. - According to the STM32L-Discovery User Manual, the LCD should be removed
The STM32L152 does support USB, but the USB pins are "free I/O" on the board from its socket if you use any of the LCD pins for any other purpose.
and no USB connector is provided. So the use of a USB console is not option.
If you need console output, you will need to disable either LCD (and use any I have had no problems using the USART1 with PA9 and PA10 with a 3.3-5V
USART) or the LEDs (and use USART1) RS-232 transceiver module at 57600 baud. I have not tried higher baud
rates.
- There is no support for a USB serial connector on the STM32L-Discovery
board. The STM32L152 does support USB, but the USB pins are "free I/O"
on the board and no USB connector is provided. So the use of a USB
console is not option. If you need console output, you will need to
disable either LCD (and use any USART) or the LEDs (and use USART1)
Debugging Debugging
========= =========
STM32 ST-LINK Utility STM32 ST-LINK Utility
--------------------- ---------------------
For simply writing to FLASH, I use the STM32 ST-LINK Utility. At least For simply writing to FLASH, I use the STM32 ST-LINK Utility. At least
version 2.4.0 is required (older versions do not recognize the STM32 F3 version 2.4.0 is required (older versions do not recognize the STM32 F3
device). This utility is available from free from the STMicro website. device). This utility is available from free from the STMicro website.
Debugging Debugging
--------- ---------
If you are going to use a debugger, you should make sure that the following If you are going to use a debugger, you should make sure that the following
settings are selection in your configuration file: settings are selection in your configuration file:
CONFIG_DEBUG_SYMBOLS=y : Enable debug symbols in the build CONFIG_DEBUG_SYMBOLS=y : Enable debug symbols in the build
CONFIG_ARMV7M_USEBASEPRI=y : Use the BASEPRI register to disable interrupts CONFIG_ARMV7M_USEBASEPRI=y : Use the BASEPRI register to disable interrupts
OpenOCD OpenOCD
------- -------
I am told that OpenOCD will work with the ST-Link, but I have never tried I am told that OpenOCD will work with the ST-Link, but I have never tried
it. it.
https://github.com/texane/stlink https://github.com/texane/stlink
-------------------------------- --------------------------------
This is an open source server for the ST-Link that I have never used. This is an open source server for the ST-Link that I have never used.
Atollic GDB Server Atollic GDB Server
------------------ ------------------
You can use the Atollic IDE, but I have never done that either. You can use the Atollic IDE, but I have never done that either.
STM32L-Discovery-specific Configuration Options STM32L-Discovery-specific Configuration Options
=============================================== ===============================================
@ -693,20 +700,20 @@ STM32L-Discovery-specific Configuration Options
Configurations Configurations
============== ==============
Each STM32L-Discovery configuration is maintained in a sub-directory and Each STM32L-Discovery configuration is maintained in a sub-directory and
can be selected as follow: can be selected as follow:
cd tools cd tools
./configure.sh STM32L-Discovery/<subdir> ./configure.sh STM32L-Discovery/<subdir>
cd - cd -
. ./setenv.sh . ./setenv.sh
If this is a Windows native build, then configure.bat should be used If this is a Windows native build, then configure.bat should be used
instead of configure.sh: instead of configure.sh:
configure.bat STM32L-Discovery\<subdir> configure.bat STM32L-Discovery\<subdir>
Where <subdir> is one of the following: Where <subdir> is one of the following:
nsh: nsh:
--- ---
@ -739,3 +746,9 @@ Where <subdir> is one of the following:
CONFIG_HOST_WINDOWS=y : Builds under Windows CONFIG_HOST_WINDOWS=y : Builds under Windows
CONFIG_WINDOWS_CYGWIN=y : Using Cygwin CONFIG_WINDOWS_CYGWIN=y : Using Cygwin
CONFIG_ARMV7M_TOOLCHAIN_CODESOURCERYW=y : CodeSourcery for Windows CONFIG_ARMV7M_TOOLCHAIN_CODESOURCERYW=y : CodeSourcery for Windows
5. To enable SLCD support:
CONFIG_ARCH_LEDS=y : Disable LED support
CONFIG_LIB_SLCDCODEC=y : Enable the SLCD CODEC
CONFIG_STM32_LCD=y : Enable the SLCD

View File

@ -1,5 +1,5 @@
############################################################################ ############################################################################
# configs/stm32f3discovery/nsh/Make.defs # configs/stm32l1discovery/nsh/Make.defs
# #
# Copyright (C) 2013 Gregory Nutt. All rights reserved. # Copyright (C) 2013 Gregory Nutt. All rights reserved.
# Author: Gregory Nutt <gnutt@nuttx.org> # Author: Gregory Nutt <gnutt@nuttx.org>

View File

@ -1,5 +1,5 @@
#!/bin/bash #!/bin/bash
# configs/stm32f3discovery/nsh/setenv.sh # configs/stm32l1discovery/nsh/setenv.sh
# #
# Copyright (C) 2013 Gregory Nutt. All rights reserved. # Copyright (C) 2013 Gregory Nutt. All rights reserved.
# Author: Gregory Nutt <gnutt@nuttx.org> # Author: Gregory Nutt <gnutt@nuttx.org>

File diff suppressed because it is too large Load Diff

View File

@ -186,38 +186,38 @@
* PC11 LCD_SEG41 LCD SEG23 * PC11 LCD_SEG41 LCD SEG23
*/ */
#define BOARD_LCD_COM0 GPIO_LCD_COM0 /* PA8 */ #define BOARD_SLCD_COM0 GPIO_LCD_COM0 /* PA8 */
#define BOARD_LCD_COM1 GPIO_LCD_COM1 /* PA9 */ #define BOARD_SLCD_COM1 GPIO_LCD_COM1 /* PA9 */
#define BOARD_LCD_COM2 GPIO_LCD_COM2 /* PA10 */ #define BOARD_SLCD_COM2 GPIO_LCD_COM2 /* PA10 */
#define BOARD_LCD_COM3 GPIO_LCD_COM3 /* PB9 */ #define BOARD_SLCD_COM3 GPIO_LCD_COM3 /* PB9 */
#define BOARD_LCD_SEG0 GPIO_LCD_SEG0 /* PA1 */ #define BOARD_SLCD_SEG0 GPIO_LCD_SEG0 /* PA1 */
#define BOARD_LCD_SEG1 GPIO_LCD_SEG1 /* PA2 */ #define BOARD_SLCD_SEG1 GPIO_LCD_SEG1 /* PA2 */
#define BOARD_LCD_SEG2 GPIO_LCD_SEG2 /* PA3 */ #define BOARD_SLCD_SEG2 GPIO_LCD_SEG2 /* PA3 */
#define BOARD_LCD_SEG3 GPIO_LCD_SEG7 /* PB3 */ #define BOARD_SLCD_SEG3 GPIO_LCD_SEG7 /* PB3 */
#define BOARD_LCD_SEG4 GPIO_LCD_SEG8 /* PB4 */ #define BOARD_SLCD_SEG4 GPIO_LCD_SEG8 /* PB4 */
#define BOARD_LCD_SEG5 GPIO_LCD_SEG9 /* PB5 */ #define BOARD_SLCD_SEG5 GPIO_LCD_SEG9 /* PB5 */
#define BOARD_LCD_SEG6 GPIO_LCD_SEG10 /* PB10 */ #define BOARD_SLCD_SEG6 GPIO_LCD_SEG10 /* PB10 */
#define BOARD_LCD_SEG7 GPIO_LCD_SEG11 /* PB11 */ #define BOARD_SLCD_SEG7 GPIO_LCD_SEG11 /* PB11 */
#define BOARD_LCD_SEG8 GPIO_LCD_SEG12 /* PB12 */ #define BOARD_SLCD_SEG8 GPIO_LCD_SEG12 /* PB12 */
#define BOARD_LCD_SEG9 GPIO_LCD_SEG13 /* PB13 */ #define BOARD_SLCD_SEG9 GPIO_LCD_SEG13 /* PB13 */
#define BOARD_LCD_SEG10 GPIO_LCD_SEG14 /* PB14 */ #define BOARD_SLCD_SEG10 GPIO_LCD_SEG14 /* PB14 */
#define BOARD_LCD_SEG11 GPIO_LCD_SEG15 /* PB15 */ #define BOARD_SLCD_SEG11 GPIO_LCD_SEG15 /* PB15 */
#define BOARD_LCD_SEG12 GPIO_LCD_SEG17 /* PA15 */ #define BOARD_SLCD_SEG12 GPIO_LCD_SEG17 /* PA15 */
#define BOARD_LCD_SEG13 GPIO_LCD_SEG16 /* PB8 */ #define BOARD_SLCD_SEG13 GPIO_LCD_SEG16 /* PB8 */
#define BOARD_LCD_SEG14 GPIO_LCD_SEG18 /* PC0 */ #define BOARD_SLCD_SEG14 GPIO_LCD_SEG18 /* PC0 */
#define BOARD_LCD_SEG15 GPIO_LCD_SEG19 /* PC1 */ #define BOARD_SLCD_SEG15 GPIO_LCD_SEG19 /* PC1 */
#define BOARD_LCD_SEG16 GPIO_LCD_SEG20 /* PC2 */ #define BOARD_SLCD_SEG16 GPIO_LCD_SEG20 /* PC2 */
#define BOARD_LCD_SEG17 GPIO_LCD_SEG21 /* PC3 */ #define BOARD_SLCD_SEG17 GPIO_LCD_SEG21 /* PC3 */
#define BOARD_LCD_SEG18 GPIO_LCD_SEG24 /* PC6 */ #define BOARD_SLCD_SEG18 GPIO_LCD_SEG24 /* PC6 */
#define BOARD_LCD_SEG19 GPIO_LCD_SEG25 /* PC7 */ #define BOARD_SLCD_SEG19 GPIO_LCD_SEG25 /* PC7 */
#define BOARD_LCD_SEG20 GPIO_LCD_SEG26 /* PC8 */ #define BOARD_SLCD_SEG20 GPIO_LCD_SEG26 /* PC8 */
#define BOARD_LCD_SEG21 GPIO_LCD_SEG27 /* PC9 */ #define BOARD_SLCD_SEG21 GPIO_LCD_SEG27 /* PC9 */
#define BOARD_LCD_SEG22 GPIO_LCD_SEG40 /* PC10 */ #define BOARD_SLCD_SEG22 GPIO_LCD_SEG40 /* PC10 */
#define BOARD_LCD_SEG23 GPIO_LCD_SEG41 /* PC11 */ #define BOARD_SLCD_SEG23 GPIO_LCD_SEG41 /* PC11 */
#define BOARD LCD_NCOM 4 #define BOARD_SLCD_NCOM 4
#define BOARD LCD_NSEG 24 #define BOARD_SLCD_NSEG 24
#define BOARD_LCD_NGPIOS 28 #define BOARD_SLCD_NGPIOS 28
/**************************************************************************************************** /****************************************************************************************************
* Public Types * Public Types