Skip to content

Commit

Permalink
STM32L-Discovery LCD driver is code compele but untested
Browse files Browse the repository at this point in the history
  • Loading branch information
gregory-nutt committed May 23, 2013
1 parent c1f6d50 commit abf8c8a
Show file tree
Hide file tree
Showing 11 changed files with 1,094 additions and 219 deletions.
2 changes: 2 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
Expand Up @@ -4781,3 +4781,5 @@
should set the POLLNVAL event and return immediately (2013-5-23).
* libc/misc/lib_slcdencode.c and lib_slcddecode.c: Add logic to marshal
and serialized special SLCD intermixed with normal ASCII data (2013-5-23)
* configs/stm32ldiscovery/src/stm32_lcd.c: STM32L-Discovery's segment LCD
is code complete but completely untested (2013-5-23).
24 changes: 15 additions & 9 deletions arch/arm/src/stm32/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -500,7 +500,7 @@ config STM32_CAN1
default n
select CAN
select STM32_CAN
depends on !STM32_VALUELINE
depends on !STM32_VALUELINE && !STM32_STM32L15XX

config STM32_CAN2
bool "CAN2"
Expand Down Expand Up @@ -586,11 +586,6 @@ config STM32_I2C3
depends on STM32_STM32F20XX || STM32_STM32F40XX
select STM32_I2C

config STM32_IWDG
bool "IWDG"
default n
select WATCHDOG

config STM32_OTGFS
bool "OTG FS"
default n
Expand Down Expand Up @@ -664,6 +659,7 @@ config STM32_SYSCFG
config STM32_TIM1
bool "TIM1"
default n
depends on !STM32_STM32L15XX

config STM32_TIM2
bool "TIM2"
Expand Down Expand Up @@ -693,7 +689,7 @@ config STM32_TIM7
config STM32_TIM8
bool "TIM8"
default n
depends on !STM32_VALUELINE
depends on !STM32_VALUELINE && !STM32_STM32L15XX

config STM32_TIM9
bool "TIM9"
Expand Down Expand Up @@ -767,14 +763,14 @@ config STM32_USART3
config STM32_UART4
bool "UART4"
default n
depends on !STM32_STM32F30XX
depends on !STM32_STM32F30XX &&!STM32_STM32L15XX
select ARCH_HAVE_UART4
select STM32_USART

config STM32_UART5
bool "UART5"
default n
depends on !STM32_STM32F30XX
depends on !STM32_STM32F30XX &&!STM32_STM32L15XX
select ARCH_HAVE_UART5
select STM32_USART

Expand Down Expand Up @@ -805,6 +801,16 @@ config STM32_USB
depends on (STM32_STM32F10XX && !STM32_VALUELINE) || STM32_STM32L15XX || STM32_STM32F30XX
select USBDEV

config STM32_LCD
bool "Segment LCD"
default n
depends on STM32_STM32L15XX

config STM32_IWDG
bool "IWDG"
default n
select WATCHDOG

config STM32_WWDG
bool "WWDG"
default n
Expand Down
8 changes: 4 additions & 4 deletions arch/arm/src/stm32/chip/stm32_lcd.h
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@
# define LCD_CR_BIAS_1TO4 (0 << LCD_CR_BIAS_SHIFT) /* 00: Bias 1/4 */
# define LCD_CR_BIAS_1TO2 (1 << LCD_CR_BIAS_SHIFT) /* 01: Bias 1/2 */
# define LCD_CR_BIAS_1TO3 (2 << LCD_CR_BIAS_SHIFT) /* 10: Bias 1/3 */
#define LCD_CR_MUX_SEG (1 << 7) /* Bit 7: Mux segment enable
#define LCD_CR_MUX_SEG (1 << 7) /* Bit 7: Mux segment enable */
/* Bits 8-31 Reserved */

/* LCD frame control register */
Expand Down Expand Up @@ -181,7 +181,7 @@
# define LCD_FCR_PS_DIV8192 (13 << LCD_FCR_PS_SHIFT) /* 0011: ck_ps = LCDCLK/8192 */
# define LCD_FCR_PS_DIV16384 (14 << LCD_FCR_PS_SHIFT) /* 0011: ck_ps = LCDCLK/16384 */
# define LCD_FCR_PS_DIV32768 (15 << LCD_FCR_PS_SHIFT) /* 0011: ck_ps = LCDCLK/32768 */
/* Bits 26-31 Reserved
/* Bits 26-31 Reserved */

/* LCD status register */

Expand All @@ -191,14 +191,14 @@
#define LCD_SR_UDD (1 << 3) /* Bit 3: Update Display Done */
#define LCD_SR_RDY (1 << 4) /* Bit 4: Ready flag */
#define LCD_SR_FCRSF (1 << 5) /* Bit 5: LCD Frame Control Register Synchronization flag */
/* Bits 6-31 Reserved
/* Bits 6-31 Reserved */

/* LCD clear register */

/* Bit 0 Reserved */
#define LCD_CLR_SOFC (1 << 1) /* Bit 1: Start of frame flag clear */
/* Bit 2 Reserved */
#define LCD_CLR_UDDC (1 << 2) /* Bit 3: Update display done clear
#define LCD_CLR_UDDC (1 << 2) /* Bit 3: Update display done clear */
/* Bits 31:2-31 Reserved */

/* LCD display memory, COMn, S00-S31 */
Expand Down
211 changes: 112 additions & 99 deletions configs/stm32ldiscovery/README.txt
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
README
======

This README discusses issues unique to NuttX configurations for the
STMicro STM32L-Discovery development board. The STM32L-Discovery board
is based on the STM32L152RBT6 MCU (128KB FLASH and 16KB of SRAM).
This README discusses issues unique to NuttX configurations for the
STMicro STM32L-Discovery development board. The STM32L-Discovery board
is based on the STM32L152RBT6 MCU (128KB FLASH and 16KB of SRAM).

The STM32L-Discovery and 32L152CDISCOVERY kits are functionally
equivalent. The difference is the internal Flash memory size (STM32L152RBT6
with 128 Kbytes or STM32L152RCT6 with 256 Kbytes).
The STM32L-Discovery and 32L152CDISCOVERY kits are functionally
equivalent. The difference is the internal Flash memory size (STM32L152RBT6
with 128 Kbytes or STM32L152RCT6 with 256 Kbytes).

Both boards feature:
Both boards feature:

- An ST-LINK/V2 embedded debug tool interface,
- LCD (24 segments, 4 commons),
- LEDs,
- Pushbuttons,
- A linear touch sensor, and
- Four touchkeys.
- An ST-LINK/V2 embedded debug tool interface,
- LCD (24 segments, 4 commons),
- LEDs,
- Pushbuttons,
- A linear touch sensor, and
- Four touchkeys.

Contents
========
Expand Down Expand Up @@ -395,107 +395,114 @@ NXFLAT Toolchain
LEDs
====

The STM32L-Discovery board has four LEDs. Two of these are controlled by
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
communications are in progress between the PC and the ST-LINK/V2.
LD2 PWR: Red LED indicates that the board is powered.

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
MCU.
User LD4: Blue LED is a user LED connected to the I/O PB6 of the STM32L152
MCU.

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
include/board.h and src/up_leds.c. The LEDs are used to encode OS-related
events as follows:

SYMBOL Meaning LED state
LED3 LED4
------------------- ----------------------- -------- --------
LED_STARTED NuttX has been started OFF OFF
LED_HEAPALLOCATE Heap has been allocated OFF OFF
LED_IRQSENABLED Interrupts enabled OFF OFF
LED_STACKCREATED Idle stack created ON OFF
LED_INIRQ In an interrupt No change
LED_SIGNAL In a signal handler No change
LED_ASSERTION An assertion failed No change
LED_PANIC The system has crashed OFF Blinking
LED_IDLE STM32 is is sleep mode Not used
The STM32L-Discovery board has four LEDs. Two of these are controlled by
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 communications are in progress between the PC and the
ST-LINK/V2.
LD2 PWR: Red LED indicates that the board is powered.

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 MCU.
User LD4: Blue LED is a user LED connected to the I/O PB6 of the
STM32L152 MCU.

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
include/board.h and src/up_leds.c. The LEDs are used to encode OS-related
events as follows:

SYMBOL Meaning LED state
LED3 LED4
------------------- ----------------------- -------- --------
LED_STARTED NuttX has been started OFF OFF
LED_HEAPALLOCATE Heap has been allocated OFF OFF
LED_IRQSENABLED Interrupts enabled OFF OFF
LED_STACKCREATED Idle stack created ON OFF
LED_INIRQ In an interrupt No change
LED_SIGNAL In a signal handler No change
LED_ASSERTION An assertion failed No change
LED_PANIC The system has crashed OFF Blinking
LED_IDLE STM32 is is sleep mode Not used

Serial Console
==============

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,
the LCD: Most USART pins are available if the LCD is enabled; USART2 may be
used if either the LCD or the on-board LEDs are disabled.
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,
the LCD: Most USART pins are available if the LCD is enabled; USART2 may
be used if either the LCD or the on-board LEDs are disabled.

PA9 USART1_TX LCD glass COM1 P2, pin 22
PA10 USART1_RX LCD glass COM2 P2, pin 21
PB6 USART1_TX LED Blue P2, pin 8
PB7 USART1_RX LED Green P2, pin 7
PA9 USART1_TX LCD glass COM1 P2, pin 22
PA10 USART1_RX LCD glass COM2 P2, pin 21
PB6 USART1_TX LED Blue P2, pin 8
PB7 USART1_RX LED Green P2, pin 7

PA2 USART2_TX LCD SEG1 P1, pin 17
PA3 USART2_RX LCD SEG2 P1, pin 18
PA2 USART2_TX LCD SEG1 P1, pin 17
PA3 USART2_RX LCD SEG2 P1, pin 18

PB10 USART3_TX LCD SEG6 P1, pin 22
PB11 USART3_RX LCD SEG7 P1, pin 23
PC10 USART3_TX LCD SEG22 P2, pin 15
PC11 USART3_RX LCD SEG23 P2, pin 14
PB10 USART3_TX LCD SEG6 P1, pin 22
PB11 USART3_RX LCD SEG7 P1, pin 23
PC10 USART3_TX LCD SEG22 P2, pin 15
PC11 USART3_RX LCD SEG23 P2, pin 14

GND and (external) 5V are available on both P1 and P2. Note: These signals
may be at lower voltage levels and, hence, may not properly drive an external
RS-232 transceiver.
NOTES:

NOTE: The crystal X3 is not installed on the STM32L3-Discovery. As a
result, 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.
- GND and (external) 5V are available on both P1 and P2. Note: These
signals may be at lower voltage levels and, hence, may not properly
drive an external RS-232 transceiver.

I have had no problems using the USART1 with PA9 and PA10 with a 3.3-5V
RS-232 transceiver module at 57600 baud. I have not tried higher baud rates.
- The crystal X3 is not installed on the STM32L3-Discovery. As a result,
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.
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)
- According to the STM32L-Discovery User Manual, the LCD should be removed
from its socket if you use any of the LCD pins for any other purpose.

I have had no problems using the USART1 with PA9 and PA10 with a 3.3-5V
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
=========

STM32 ST-LINK Utility
---------------------
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
device). This utility is available from free from the STMicro website.
STM32 ST-LINK Utility
---------------------
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
device). This utility is available from free from the STMicro website.

Debugging
---------
If you are going to use a debugger, you should make sure that the following
settings are selection in your configuration file:
Debugging
---------
If you are going to use a debugger, you should make sure that the following
settings are selection in your configuration file:

CONFIG_DEBUG_SYMBOLS=y : Enable debug symbols in the build
CONFIG_ARMV7M_USEBASEPRI=y : Use the BASEPRI register to disable interrupts
CONFIG_DEBUG_SYMBOLS=y : Enable debug symbols in the build
CONFIG_ARMV7M_USEBASEPRI=y : Use the BASEPRI register to disable interrupts

OpenOCD
-------
I am told that OpenOCD will work with the ST-Link, but I have never tried
it.
OpenOCD
-------
I am told that OpenOCD will work with the ST-Link, but I have never tried
it.

https://github.com/texane/stlink
--------------------------------
This is an open source server for the ST-Link that I have never used.
https://github.com/texane/stlink
--------------------------------
This is an open source server for the ST-Link that I have never used.

Atollic GDB Server
------------------
You can use the Atollic IDE, but I have never done that either.
Atollic GDB Server
------------------
You can use the Atollic IDE, but I have never done that either.

STM32L-Discovery-specific Configuration Options
===============================================
Expand Down Expand Up @@ -693,20 +700,20 @@ STM32L-Discovery-specific Configuration Options
Configurations
==============

Each STM32L-Discovery configuration is maintained in a sub-directory and
can be selected as follow:
Each STM32L-Discovery configuration is maintained in a sub-directory and
can be selected as follow:

cd tools
./configure.sh STM32L-Discovery/<subdir>
cd -
. ./setenv.sh

If this is a Windows native build, then configure.bat should be used
instead of configure.sh:
If this is a Windows native build, then configure.bat should be used
instead of configure.sh:

configure.bat STM32L-Discovery\<subdir>

Where <subdir> is one of the following:
Where <subdir> is one of the following:

nsh:
---
Expand Down Expand Up @@ -739,3 +746,9 @@ Where <subdir> is one of the following:
CONFIG_HOST_WINDOWS=y : Builds under Windows
CONFIG_WINDOWS_CYGWIN=y : Using Cygwin
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
2 changes: 1 addition & 1 deletion configs/stm32ldiscovery/nsh/Make.defs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
############################################################################
# configs/stm32f3discovery/nsh/Make.defs
# configs/stm32l1discovery/nsh/Make.defs
#
# Copyright (C) 2013 Gregory Nutt. All rights reserved.
# Author: Gregory Nutt <[email protected]>
Expand Down
2 changes: 1 addition & 1 deletion configs/stm32ldiscovery/nsh/setenv.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#!/bin/bash
# configs/stm32f3discovery/nsh/setenv.sh
# configs/stm32l1discovery/nsh/setenv.sh
#
# Copyright (C) 2013 Gregory Nutt. All rights reserved.
# Author: Gregory Nutt <[email protected]>
Expand Down
Loading

0 comments on commit abf8c8a

Please sign in to comment.