Preface
1. Chapter 1: The History of Arm and Microcontrollers
1.1. Section 1.1: Introduction to Microcontrollers
1.2. Section 1.2: The Arm Family History
1.3. Section 1.3: STM32 Family
1.4. Problems
1.5. Answers to Review Questions
2. Chapter 2: Arm Architecture and Assembly Language Programming
2.1. Section 2.1: The General Purpose Registers in the Arm
2.2. Section 2.2: The Arm Memory Map
2.3. Section 2.3: Load and Store Instructions in Arm
2.4. Section 2.4: Arm CPSR (Current Program Status Register)
2.5. Section 2.5: Arm Data Formats and Assembler Directives
2.6. Section 2-6: Assembler data allocation directives
2.7. Section 2.7: Introduction to Arm Assembly Programming
2.8. Section 2.8: Creating an Arm Assembly Program
2.9. Section 2.9: The Program Counter and Program Memory Space in the Arm
2.10. Section 2.10: Some Arm Addressing Modes
2.11. Section 2.11: Pipelining and Harvard Architecture in Arm
2.12. Section 2.12: RISC Architecture in Arm
2.13. Problems
2.14. Answers to Review Questions
3. Chapter 3: Arithmetic and Logic Instructions and Programs
3.1. Section 3.1: Arithmetic Instructions
3.2. Section 3.2: Logic Instructions
3.3. Section 3.3: Shift and Rotate Instructions
3.4. Section 3.4: Rotate and Shift in Data Processing Instructions (Case Study)
3.5. Section 3.5: BCD and ASCII Conversion
3.6. Problems
3.7. Answers to Review Questions
4. Chapter 4: Branch, Call, and Looping in Arm
4.1. Section 4.1: Looping and Branch Instructions
4.2. Section 4.2: Calling Subroutine with BL
4.3. Section 4.3: Time Delay
4.4. Section 4-5: Exploring the Startup File
4.5. Problems
4.6. Answers to Review Questions
5. Chapter 5: Signed Integer Numbers Arithmetic
5.1. Section 5.1: Signed Numbers Concept
5.2. Section 5.2: Signed Number Instructions and Operations
5.3. Section 5.3: Signed Number Comparison
5-4. Section 5-4: Sign Extension
5.5. Problems
5.6. Answers to Review Questions
6. Chapter 6: Arm Addressing Modes
6.1. Section 6.1: Arm Memory Access
6.2. Section 6.2: Advanced Indexed Addressing Modes
6.3. Section 6.3: ADR, LDR, and PC Relative Addressing
6.4. Section 6.4: Arm Bit-Addressable Memory Region
6.5. Problems
6.6. Answers to Review Questions
7. Chapter 7: C for Embedded Systems
7.1. Section 7.1: C Data types for Embedded systems
7.2. Section 7.2: Bit-wise Operations in C
7.3. Problems
7.4. Answer to Review Questions
8. Chapter 8: STM32F103 I/O Programming
8.1. Section 8.1: I/O Port Programming in STM32F1xx
8.2. Section 8.2: Seven-segment LED interfacing and programming
8.3. Section 8.3: Clock sources, Reset, and Power Supply Pins in STM32F10x
8.4. Section 8.4: GPIO Programming in Assembly Language
8.5. Problems
8.6. Answer to Review Questions
9. Chapter 9: LCD and Keyboard Interfacing
9.1. Section 9.1: Interfacing to an LCD
9.2. Section 9.2: Interfacing the Keyboard to the CPU
9.3. Problems
9.4. Answers to Review Questions
10. Chapter 10: UART Serial Port Programming
10.1. Section 10.1: Basics of Serial Communication
10.2. Section 10.2: Programming UART Ports
10.3. Problems
10.4. Answer to Review Questions
11. Chapter 11: STM32 ARM Timer Programming
11.1. Section 11.0: Introduction to counters and timers
11.2. Section 11.1: System Tick Timer
11.3. Section 11.2: Delay Generation with STM32 Timers
11.4. Section 11.3: Output Compare and TIM Channels
11.5. Section 11.4: Using Timer for Input Capturing
11.6. Section 11.5: Using Timer as a Counter
11.7. Problems
11.8. Answers to Review Questions
12. Chapter 12: Interrupt and Exception Programming
12.1. Section 12.1: Interrupts and Exceptions in ARM Cortex-M
12.2. Section 12.2: SysTick Programming and Interrupt
12.3. Section 12.3: STM32 I/O Port Interrupt Programming
12.4. Section 12.4: USART Serial Port Interrupt Programming
12.5. Section 12.5: Timer Interrupt Programming
12.6. Section 12.6: Interrupt Priority, nested interrupts, and latency
12.7. Section 12.7: ARM Cortex-M Processor Modes
12.8. Problems
12.9. Answer to Review Questions
13. Chapter 13: ADC, DAC, and Sensor Interfacing
13.1. Section 13.1: ADC Characteristics
13.2. Section 13.2: ADC Programming with STM32F1xx
13.3. Section 13.3: Sensor Interfacing and Signal Conditioning
13.4. Section 13.4: DAC Programming
13.5. Problems
13.6. Answers to Review Questions
14. Chapter 14: Relay, Optoisolator, and Stepper Motor Interfacing
14.1. Section 14.1: Relays and Optoisolators
14.2. Section 14.2: Stepper Motor Interfacing
14.3. Problems
14.4. Answers to Review Questions
15. Chapter 15: PWM and DC Motor Control
15.1. Section 15.1: DC Motor Interfacing and PWM
15.2. Section 15.2: Programming PWM in STM32
15.3. Section 15.3: DC Motor Control Using PWM
15.4. Problems
15.5. Answers to Review Questions
16. Chapter 16: I2C Protocol and RTC Interfacing
16.1. Section 16.1: I2C Bus Protocol
16.2. Section 16.2: I2C Programming in STM32F10x
16.3. Section 16.3: DS3231 RTC Interfacing and Programming
16.4. Problems
16.5. Answers to Review Questions
17. Chapter 17: SPI Protocol and Devices
17.1. Section 17.1: SPI Bus Protocol
17.2. Section 17.2: SPI programming in STM32
17.3. Section 17.3: MAX7219/MAX7221 SPI 7-Segment Driver
17.4. Problems
17.5. Answers to Review Questions
18. Chapter 18: Programming Graphic LCD
18.1. Section 18.1: Graphic LCDs
18.2. Section 18.2: Displaying Texts on Graphic LCDs
18.3. Problems
18.4. Answers to Review Questions
19. Chapter 19: Direct Memory Access (DMA)
19.1. Section 19.1: Introduction to DMA
19-2. Section 19-2: DMA in STM32F10x
19.3. Problems
19.4. Answers to Review Questions
Appendix A: ARM Cortex-M3 Instruction Description
A.1. Section A.1: List of ARM Cortex-M3 Instructions
A.2. Section A.2: ARM Instruction Description
Appendix B: ARM Assembler Directives
B.1. Section B.1: List of ARM Assembler Directives
B.2. Section B.2: Description of ARM Assembler Directives
Appendix C: Macros
C.1. What is a macro and how is it used?
C.2. Macros vs. subroutines
Appendix D: Passing Arguments into Functions
D.1. D.1: Passing arguments through registers
D.2. D.2: Passing through memory using references
D.3. D.3: Passing arguments through stack
D.4. D.4: AAPCS (ARM Application Procedure Call Standard)
Appendix E: ASCII Codes
Appendix F: Advanced C Programming
F.1. Section F.1: Preprocessor Directives
F.2. Section F.2: Manipulating Registers Using Defined Bit Names
Appendix G: Flowcharts and Pseudo-code (Web)
Appendix H: IC Interfacing and System Design Issues (Web)