Getting Started With ARM7 LPC2148 Microcontroller and Program it using Keil uVision

Published  October 18, 2018   0
Getting Started With ARM7 LPC2148 Microcontroller and Program it using Keil uVision

Every electronics engineer loves to break electronics things and explore what is present inside it. Recently I opened an LED TV and found ARM Chip inside it. ARM based microcontrollers are heavily used in various types of embedded products and systems. They comprise many advanced features that make them powerful and superior to other microcontrollers such as 8051, AVR and PIC. LPC2148 is one of the most commonly used ARM based Microcontroller, so we will create a series of LPC2148 tutorials and projects and share in upcoming articles. Here is the first tutorial in this series covering Getting started with LPC2148 and program it to blink LED.


So in this tutorial we will get to know about ARM7 Stick - LPC2148 and will learn how to program it with software Keil uVision and Flash magic. We will program our LPC2148 to blink an LED.


ARM Microcontroller

ARM (Advanced RISC Machines) originally known as Acorn RISC Machine is a family of reduced instruction set computing (RISC) architecture for computer processors, configured for various environments. Arm holdings is a British company who developed this architecture and licensed it to other companies, who design their own product by using this architecture.

ARM processor is widely found in electronics products such as LED TV, mobile phones, tablets, multimedia devices, gaming devices etc. Even popular electronics company like Apple’s mobiles and iPods, Raspberry pi 3 uses ARM architecture and Arm processor in it. Arm Architecture Examples: ARM7, ARM9, ARM11, CORTEX.


Benefits of ARM

  • With more features ARM processor consumes less power.
  • ARM processor are cheap and that’s why widely used in consumer electronics
  • Performs one operation at a time and works faster.


Materials Required


  • ARM7 Stick – LPC2148
  • LED
  • Breadboard
  • Jumper wires


  • Keil uVision5 IDE (Link)
  • Flash Magic (Link)


Introduction to ARM7 Stick - LPC2148 Board

ARM7 Stick LPC2148 Board

ARM7 Stick LPC2148 Board Bottom view


From the Rhydolabz Stick Series Quick Start boards this board contains NXP’s LPC-2148 microcontroller IC in it which belongs to ARM7 family. It is a high performance ARM7 TDMI-S based 32-bit RISC Microcontroller. This board is a good choice for beginners and also can be used in high end applications because of its inbuilt peripherals.


Features of ARM7 Stick

The ARM7 Stick comes with onboard LDO regulator for 3V3 Supply. They can be USB powered or externally powered by just changing the jumper. It has a on board USB to Serial converter and it also comes with boot loader code and USB interface for Serial communication and Programming. It has a Push button to hardware reset the controller. The board contains JTAG connector with 2x5 pin layout for programming/debugging and jumper pins to switch the USB interface between MCU USB pins and UART pins. It also has RTC battery backup pins and power Indication LED.

Image below shows the features present in ARM7 Stick

ARM7 LPC2148 Top and Bottom View


ARM7 Stick Features



  • Architecture: 16-bit/32-bit ARM7TDMI-S
  • CPU Frequency: 60 MHz
  • Number of GPIO pins: 45 (5V-Tolarant)
  • PWM Outputs: 6
  • ADC: Two 14-Channel (10-bit)
  • DAC: Single 10-bit DAC
  • USART Peripherals: 2
  • I2C Peripherals: 2 (40bits/s)
  • SPI Peripherals: 1
  • SSP Peripheral: 1
  • Timers: 2(32-bit)
  • Flash Memory: 512KB On-chip flash memory
  • RAM: 40kB On-chip Static RAM
  • Interrupt Pins: 21
  • Input Voltage: 4.5V ~ 6.5V
  • Current Draw: 500mA @5V
  • Dimensions: 64.5 x 31.5 MM

If you want to know more about technical features go through the datasheet of LPC2148 stick from RhydoLABZ.


Pin Details of ARM7 Stick

The complete pin-outs of ARM7 Stick is shown below. The pin numbers are present at the backside of the board. The Ground pin is indicated as GND. The 5V pin is for DC input. Now let’s see about the I/O pins. LPC2148 has two IO ports (P0 & P1) each of them are 32-bit wide. We need to understand the labelling let’s say Pa.b where a is for port number and b for pin number from (0-31).Example P0.7 which indicates port 0 and pin 7.

IMPORTANT: Each pin can perform multiple functions like PWM or ADC or GPIO etc. So we need specify them while programming that where we use registers to configure them. Let’s see about registers later in this tutorials.

ARM7 LPC2148 Pinout


Pin Details








 P0.0 to P0.31


32-Bit I/O with individual bi-directional control

28 Pins for GPIO

Pin P0.31 for Digital output function only

Pins P0.24, P0.26, P0.27 are not available




  P1.16 to P1.31




32-Bit I/O with individual bi-directional control

16 Pins for GPIO

Pins P1.0 to P1.15 are not available



Registers in ARM7 LPC-2148

Before we get into the programming we must know how to configure pins in LPC-2148.That where the registers come into action.






GPIO Port PIN Value Register

Can be used to read the CURRENT STATE OF GPIO configured port pin




GPIO Direction Control Register

This individually controls direction of each port pin





GPIO Output SET register

Controls State of OUTPUT pins in conjunction with IOCLR

Writing ONE: produces HIGH at corresponding port pins.

Writing ZERO : No effects






GPIO Output CLEAR register

Controls State of OUTPUT pins

Writing ONE : produces LOW at corresponding ports pins

                          Clears corresponding bits in IOSET register

Writing ZERO : No effects



The above table shows the registers that are used to configure the I/O ports.


Using These Registers as Individual Registers

1. IOSELX: Where X is 0,1,2. IOSEL is used to select functions. As each pin have multiple functions.




P0.0 to P0.15


P0.16 to P0.31


P0.16 to P0.31


Each pin has 4 functions so 2-bits/pin is provided for selecting function On RESET all pins are configured as GPIO pins.












2. For using IODIR, IOSET, IOCLR for corresponding port and pin we need to specify them by following

IO_DIR, IO_SET, IO_CLR. We need to include just the port number we want to use.

Below table shows some examples for using registers and how we configure them.







INPUT PIN     : 0


IO0DIR = (1<<10)

P0.10 as OUTPUT



INPUT PIN     : 0


IO1DIR= (1<<20)

P1.20 as OUTPUT



SET : 1

IO0SET =(1<<10)

P0.10 as HIGH





P0.10 as LOW



SET : 1


P1.20 as HIGH





P1.20 as LOW


Programming ARM7 LPC2148 Stick

The LPC2148 Stick comes with pre-programmed boot loader, can be programmed using USB-UART interface available on-board. Also, the board can be powered using the same USB connector. It is also programmable via JTAG interface. But in this tutorial we are using USB connector.

For Programming we use KEIL uVISION which can create HEX file from C language and use FLASH MAGIC tool to dump HEX file into ARM7 Stick.

So let’s gets start with blinking LED program. So in this tutorial we will show you

  • How to install KEIL uVISION 5 And install ARM7 IDE for KEIL
  • How to install Flash Magic
  • Then convert our Program .C to HEX file
  • Then Flashing HEX file into ARM7 Stick


Installing KEIL uVISION 5 with ARM7 Packages & Flash Magic

Step 1: Download required files from the link below



Flash Magic


Step 2: Install Keil uVision 5

Install Keil uVision 5


Step 3: Wait for installation it takes some minutes


Step 4: After successful installing of Keil uVision 5 we need to install KEIL LEGACY SUPPORT FOR 

ARM7 as in KEIL uVISION 5 this package is not included.


Step 5: Open link given above and download packages.

Download Package for Keil uVision


Step 6: Install the package. This will take few minutes.

Installing MDK ARM7/9 Support Package in Keil


Step 7: Now keil uVision is ready. Next download the Flash Magic Tool from the link given above in step1 and install it

Install the Flash Magic


Now we have installed all the softwares successfully, now we will make the hardware connections and see how to create a new project and make a hex file using Keil uVision and to flash hex file into ARM7 Stick using flash magic.


Circuit Connections

Circuit Diagram for Blinking a LED with ARM7 LPC2148 using keil uVision


The Table below shows the circuit connections.

ARM7 Stick







Creating a New Project in Keil uVision 5 for ARM7 LPC2148

Step 1: Open Keil uVision

Open Keil uVision


Step 2: Now open Project –> New uVision Project

New uVision Project


Step 3: Give Name to Project e.g. “firstproject” and save it.


Step 4: We will get popup box Select Device for Target “Target1”. There will be a drop down menu where we have to select Legacy Device Database [no RTE].

NOTE: If you didn’t install ARM7 packages this Legacy device database wont appear here, so make sure you install those packages.

Select Device for Target for new uVision project


Step 5: Select our Device name LPC2148 and click OK

Programming LPC2148 using Keil


Step 6: A dialogue box appears to copy Startup.s to project folder, just click yes

Dialog box appears to copy Startup.s


Step 7: Now it appears like the below image.

New project in uVisio


Step 8: Now Click File >> New

Save as the new uVision project


Step 9: Now do the programming’s here in text area. After doing coding click File >>Save As


Step 10: Now save as the file name with .C extension. We used firstproject.c

Change the extension to .c


Step 11: Now Right click on Source Group 1 present left side and click Add Existing Files to Group ‘Source Group 1

Add file to group


Step 12:  Now Add files to Group ‘Source  Group1’dialog box appears. Now select the file you saved with .C extension and then click add, then click close

Add files to Source Group1


Step 13: Now the firstproject.c file is included. See the image below.

New project After adding files to Source group1


Step 14: Now click Options for target icon. You can see below image to fins where it is.

Click Options for target icon


Step 15: Now in Options for Target ‘Target 1’ open tab Target give Xtal (Mhz) as 12

Setting Crystal Oscillator Frequency for LPC2148 using Keil


Step 16: In Linker tab, tick Use memory layout from Target dialog

Setting Might fall condition as error for LPS2148 using keil


Step 17: Now under output tab tick create Hex file and then click ‘Ok’

Create hex file after programming LPC214


Step 18: Now click on BUILD icon or press F7 to create hex file.

Click on build to create hex file while programming LPC2148 using Keil


Step 19: Now the hex file is created and we can note it down at the bottom. As like this image below as it indicates hex file is created.

Hex file created for project using LPC2148


Step 20: Now it’s time to flash the hex file to ARM7 Stick. So open Flash Magic

Flash the hex file to ARM7 Stick


The Flash magic tool appears as above.

Below are the steps for flashing the the ARM LPC2148:

  • Select the LPC2148
  • Give the COM port number according to Device Manager (Mine was COM7)
  • Give baud rate as 38400
  • Oscillator as 12 Mhz
  • Tick “Erase blocks used by firmware”
  • Now select the hex file path
  • Tick verify after programming checkbox.
  • And click START


After successfully flashing in seconds, Finished (In green Colour) appears at the bottom as shown in image below

LED start blinking after flash LPC2148 using Keil


Now you can see the that LED starts blinking on the breadboard


Coding Explanation

Complete code for blinking LED with LPC2148 is given below. Code is simple and can be easily understood.

This header file includes all files for LPC214x series of microcontrollers.

#include <lpc214x.h>


As we have connected output to P0.10 it uses the IODIR register and make the pin Port 0 Pin 10 as output.

IO0DIR = (1<<10);  


This register sets the P0.10 to HIGH making LED ON.

IO0SET = (1<<10) ; 


This register clears the P0.10 to LOW making LED OFF

IO0CLR = (1<<10);


Below statements are present in while loop to execute the code continuously

       IO0SET = (1<<10) ;    

       IO0CLR = (1<<10);    


Functions delay_ms is used to create a delay time between SET & CLR to blink the LED in the interval of 1 second.

Complete code with a demonstration Video is given below.


#include <lpc214x.h>            //include header files for LPC-214x series

void delay_ms(unsigned int count)


  unsigned int j=0,i=0;

  for(j=0;j<count;j++)                                           //For loop to create delay






int main()


    IO0DIR = (1<<10);         //Configure the pin P0.10 as OUTPUT;

  while(1)                                    // While loop to execute program continueously


       IO0SET = (1<<10) ;     // Make the pin P0.10 HIGH (LED ON) 


       IO0CLR = (1<<10);     // Make the pin P0.10 LOW    (LED OFF)




Have any question realated to this Article?

Ask Our Community Members