Contents Arm Microcontroller Projects
Contents Arm Microcontroller Projects
Beginner to Intermediate
an Elektor Publication
LEARN
DESIGN
SHARE
Table of Contents
Table of Contents
Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Chapter 1 Microcomputer systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.2 Microcontroller Systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.2.1 RAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.2.2 ROM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.2.3 PROM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.2.4 EPROM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.2.5 EEPROM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.2.6 Flash Memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.3 Microcontroller Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.3.1 Supply Voltage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.3.2 The Clock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
1.3.3 Timers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
1.3.4 Watchdog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
1.3.5 Reset Input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
1.3.6 Interrupts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.3.7 Brown-out Detector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.3.8 Analog-to-digital Converter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.3.9 Sample and Hold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.3.10 RS232 Serial Input-Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.3.11 SPI and I2C Busses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.3.12 EEPROM Data Memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.3.13 LCD Drivers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.3.14 Analog Comparators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.3.15 Real-time Clock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.3.16 Sleep Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.3.17 Power-on Reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.3.18 Low Power Operation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
1.3.19 Current Sink/Source Capability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Table of Contents
3.2.2 Internal Block Diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.2.3 The Power Supply . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.2.4 Low Power Modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.2.5 The Clock Circuit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.2.6 General Purpose Inputs and Outputs (GPIOs) . . . . . . . . . . . . . . . . . . . . . . 48
3.3 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Chapter 4 Microcontroller Development Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.1 ARM Hardware Development Kits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.1.1 EasyMx Pro V7 for STM32 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.1.2 Clicker 2 for STM32 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
4.1.3 EasyMx Pro V7 for Tiva C Series . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.1.4 MCB1000 Development Kit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.1.5 MCBSTM32F200 development Kit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
4.1.6 ARM7 Development Kit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
4.2 ARM Software Development Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
4.2.1 mikroC Pro for ARM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
4.2.2 ARM DS-5 Development Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
4.2.3 ARM Compilation Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
4.2.4 Green Hills ARM Software Development Tools . . . . . . . . . . . . . . . . . . . . . . 59
4.2.5 MDK-ARM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
4.2.6 CrossWorks for ARM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
4.2.7 IAR Embedded Workbench for ARM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
4.2.8 JumpStart Software Development . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Chapter 5 Programming ARM Microcontrollers . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
5.1 mikroC STM32F107VCT6 Microcontroller Specific Features . . . . . . . . . . . . . . . . . 63
5.2 The General Purpose Input-Output (GPIO) Library . . . . . . . . . . . . . . . . . . . . . . . 64
5.2.1 GPIO_Clk_Enable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
5.2.2 GPIO_Clk_Disable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
5.2.3 GPIO_Config . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
5.2.4 GPIO_Set_Pin_Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
5.2.5 GPIO_Digital_Input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
5.2.6 GPIO_Digital_Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
10
Table of Contents
6.1.5 REPEAT UNTIL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
6.1.6 Calling Subprograms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
6.1.7 Subprogram Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
6.2 Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
6.3 Representing for Loops in Flow Charts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
6.4 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
6.5 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
Chapter 7 The EasyMx PRO v7 for STM32 Development Board . . . . . . . . . . . . . . . . 107
7.1 The Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
7.2 The Power Supply . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
7.3 The CPU Card . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
7.4 On-board Programmer and Hardware Debugger . . . . . . . . . . . . . . . . . . . . . . . 109
7.5 The LEDs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
7.6 mikroBUS Sockets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
7.7 USB-UART Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
7.8 USB Host Communication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
7.9 USB Device Communication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
7.10 Ethernet Communication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
7.11 Communication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
7.12 Audio I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
7.13 microSD card Slot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
7.14 320x240 Pixel TFT Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
7.15 Touch Panel Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
7.16 128x64 Pixel GLCD Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
7.17 Navigation Switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
7.18 DS1820 Digital Temperature Sensor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
7.19 LM35 Analog Temperature Sensor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
7.20 Serial Flash Memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
7.21 EEPROM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
7.22 Piezo Buzzer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
7.23 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
11
12
Table of Contents
10.5 PROJECT 5 - TFT Displays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
10.6 PROJECT 6 Displaying Temperature on TFT Display . . . . . . . . . . . . . . . . . . . 214
10.7 PROJECT 7 - Timer Interrupts - Chronograph . . . . . . . . . . . . . . . . . . . . . . . . 217
Appendix A Programming Listings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
A.1 Flashing LEDs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
A.2 Flashing LED (LED10.c) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
A.3 Complex Flashing LED (LEDCPLX.c) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
A.4 Chasing LEDs (LEDCHASE.c) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
A.5 Binary Counting LEDs (LEDCNT.c) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
A.6 Random Flashing LEDs (LEDRAN.c) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
A.7 Push-Button Switch With LEDs (SWITCH.c) . . . . . . . . . . . . . . . . . . . . . . . . . . 229
A.8 Event Counter With LEDs (EVENTLED.c) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
A.9 Event Counter With LEDs - Modified Listing (EVENTLED2.c) . . . . . . . . . . . . . . . 231
A.10 Quiz Game Controller - PDL Listing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
A.11 Quiz Game Controller (QUIZ.c) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
A.12 Quiz Game Controller (QUIZ2.c) - Modified Listing . . . . . . . . . . . . . . . . . . . . . 235
A.13 SOS Morse Code (SOS.c) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
A.14 Generating Melody Using a Piezo Buzzer (Melody.c) . . . . . . . . . . . . . . . . . . . . 239
A.15 Electronic Organ (ORGAN.c) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
A.16 Displaying Text on LCD Display (LCDTXT.c) . . . . . . . . . . . . . . . . . . . . . . . . . . 242
A.17 Event Counter With LCD Display (LCDEVNT.c) . . . . . . . . . . . . . . . . . . . . . . . . 243
A.18 Event Counter With LCD Modified (LCDEVNT2.c) . . . . . . . . . . . . . . . . . . . . . . 245
A.19 LCD Font Generation (FONT.c) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
A.20 Voltmeter With LCD (VOLTMETER.c) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
A.21 Analog Temperature Measurement (LM35.c) . . . . . . . . . . . . . . . . . . . . . . . . . 250
A.22 Dice With LCD (DICE.c) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
A.23 7-Seg Click Board (SEVENSEG.c) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
A.24 7-Seg Click Board - Modified (SEVENSEG2.c) . . . . . . . . . . . . . . . . . . . . . . . . 257
A.25 Temperature and Humidity Measurement PDL . . . . . . . . . . . . . . . . . . . . . . . . 260
A.26 Temperature and Humidity Measurement (HTU21D.c) . . . . . . . . . . . . . . . . . . 262
A.27 Simple Calculator With Keypad PDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
A.28 Simple Calculator With Keypad (KEYPAD.c) . . . . . . . . . . . . . . . . . . . . . . . . . . 266
13
14