Mastering Embedded C Programming on LPC 1768 Platform
Duration – 120 hrs.
Program Objective:
To equip learners with industry-relevant technical skills and enhance their job readiness through project-based learning, hands-on tool exposure, and real-world application deployment, thereby preparing them for successful employment in core domain areas
Program Structure:
Embedded Hardware and C Programming – 60 hrs.
- Embedded hardware and Microcontroller Fundamentals
- Mastering C and Embedded C
Firmware development Programming – 60 hrs.
- LPC1768 MCU Bare-Metal Programming
- HAL and Driver Development
- Embedded Protocols
- FreeRTOS Programming
Experiential Project Based Learning
- Embedded Project Work on Multi-Peripheral Integration and Real-Time Data Acquisition
(AGILE + SCRUM + GIT + GitHub)
- Embedded Project Work on Multi-Peripheral Integration and Real-Time Data Acquisition
Program Outcomes
- Build strong logical, structured, and systems programming skills
- Build a strong foundation in embedded programming, microcontroller interfacing, and real-time system design.
- Empower students to design intelligent embedded systems and gain expertise in communication protocols
- To equip engineering students with industry-relevant software and hardware skills, enhancing their employability in the embedded systems and AI domains
- Integration of hardware and software skills, enabling participants to contribute effectively to cross-functional teams
Tools / Platform:
- Operating System: Ubuntu (Linux OS with GCC compiler), WSL (Windows Subsystem for Linux)
- IDEs / Compilers: Code::Blocks, Visual Studio Code, Dev-C++
- Microcontroller Board: LPC1768 NUCLEO Board
- Development Tools: LPCXpresso IDE, Flash Magic
- RTOS: FreeRTOS
| Embedded Hardware and C programming (60 hrs.) | ||
|---|---|---|
| Embedded Hardware and Microcontroller Fundamentals | ||
|
Signal Conditioning Circuits: Operational Amplifiers (Op-Amps): Amplifiers, Buffers/Voltage Followers, Comparators, Filters (Current-to-Voltage Converters Active), Voltage Dividers | Analog-to-Digital Converters (ADCs)- Purpose, Types, Key Specs , Digital-to-Analog Converters (DACs),Oscillator Circuits : Crystal Oscillator, RC Oscillator | Power Management Circuits: Voltage Regulators, Power-on Reset (POR) / Brown-out Reset (BOR) Circuits, Current Limiting Circuits, MOSFETs/BJTs (as switches), Motor Driver ICs (e.g., H-bridges) |
| Digital Logic: Logic gates (AND, OR, NOT, XOR, NAND, NOR, XNOR) and truth tables. | Basic combinational logic : ADDERS, MUX, DEMUX, ENCODER, DECODER | Basic Sequential logic : FLIP-FLOPS,SHIFT REGISTERS, COUNTERS |
| Mastering C and Embedded C | ||
|---|---|---|
| Literals, Data types, qualifiers, variables: Operators: Unary, Binary and Ternary, Presidency and associativity of operators evaluation | Control flow statements: Selective structures:: if-else, switch .Iterative structures: while,do-while,for loop, use of break and continue in loop | Modular Programming using functions: Function statements- function declaration, function definition, function call, parameter passing techniques: call by value,call by address |
| Numeric Arrays -1D and 2D arrays : Array declaration and Initialization, input , processing and output of array data | Character Arrays, String functions, Storing string in R?W memory . RO memory. | Bitwise Operations: AND, OR, XOR, NOT, left shift, right shift. (Crucial for register manipulation) |
| Storage classes: auto, static, extern register, Pointers: Declaration, Initialization, Types of pointers, Pointer arithmetic, void pointer, NULL pointer | Pointers:Advanced pointer usage, pointers to functions, and their role in ISRs and callbacks. | Memory Management: malloc(), free(), stack vs. heap memory |
| Data Structures: Structures, unions, enums, and their alignment in memory | volatile and const keywords: Their importance in embedded programming. | Macros and pre-processor directives: Conditional compilation (#ifdef, #ifndef), #define |
| Compiler and Linker Concepts: cross-compilation ,Startup code and reset sequence,Linker script and memory sections (.text, .data, .bss, etc.) | Good Coding Practices : Code style and conventions (MISRA C ), Static analysis and code quality tools | Version control with Git and GitHub |
| Firmware Development Programming (60 Hours) | ||
|---|---|---|
| LPC1768 MCU Bare-Metal Programming | ||
|
LPC1768 MCU Architecture & Features ARM Cortex-M3 CPU, on-chip Flash & SRAM Peripherals: GPIO, Timers, ADC, DAC, UART, SPI, I2C, PWM, CAN, USB, Ethernet Supports multiple power modes and PLL clock system |
LPC1768 Board FeaturesBuilt-in debugger/programmer (CMSIS-DAP/J-LINK) Arduino-compatible headers 3.3V/5V power supply support Expansion headers for GPIO and communication |
Software Tools IDE: LPCXpresso / Keil uVision / VS Code (GCC ARM) Programmer: Flash Magic RTOS: FreeRTOS |
|
GPIO Modes: Input, Output, Alternate function Registers: FIODIR, FIOSET, FIOCLR, FIOPIN Tasks: LED blink, push button control, GPIO interrupt |
Interrupts & NVIC Handles multiple interrupt sources Registers: ISER, ICER, ISPR, ICPR, IPR Tasks: Enable GPIO interrupts, write ISR |
Timers & PWM Modes: Timer, Counter, PWM Registers: TCR, PR, MR, IR Tasks: Delay generation, LED dimming, motor contro |
|
ADC 10-bit resolution, multiple channels Registers: ADCR, ADDR, ADINTEN Tasks: Read analog sensors, single/continuous conversion | ||
| HAL and Driver Development | ||
| Introduction to HAL and CubeMX : Introduction to STM32CubeMX for project configuration and code generation | Using the generated code and project structure, HAL APIs for GPIO, Timers, and ADC | Interfacing a push button and controlling an LED using using STM32CubeMX and HAL APIs. |
| Generating a specific frequency square wave using STM32CubeMX and HAL APIs. | Controlling LED brightness using using STM32CubeMX and HAL APIs. |
Driver architecture: Layered approach Writing a custom driver for a sensor or peripheral, Driver API design and best practices, Integrating the developed driver into a main application. |
| Embedded Protocols | ||
|---|---|---|
| UART/USART (Universal Asynchronous Receiver-Transmitter) : UART protocol basics: Baud rate, data bits, stop bits, parity. UART communication using HAL and bare-metal (polling, interrupt, DMA) | I2C (Inter-Integrated Circuit) : I2C protocol basics: Master/slave, start/stop conditions, ACK/NACK, Interfacing I2C devices (e.g., EEPROM, temperature sensor) | SPI (Serial Peripheral Interface) : SPI protocol basics: Master/slave, MOSI, MISO, SCLK, NSS, Interfacing SPI devices (e.g., SD card, external Flash memory, display) |
| FreeRTOS Programming | ||
| Introduction to RTOS and FreeRTOS: Tasks, threads, and concurrency, Task states: Running, ready, blocked, suspended, Task scheduling: Pre-emptive vs. co-operative | Introduction to FreeRTOS kernel, configuration, and porting, Creating a FreeRTOS project in STM32CubeIDE and running multiple tasks. | Inter-Task Communication : Queues - For message passing between tasks. Implementing a task communication system using queues to process data from a sensor. |
| Task Communication : Semaphores- Binary, counting, and mutexes for resource protection. Using a mutex to protect a shared resource (e.g., a shared sensor value). |
Event Groups: For task synchronization based on multiple events. Software Timers: For periodic tasks. | |
| Project Development and Integration | ||
| Embedded Project Work on Multi-Peripheral Integration and Real-Time Data Acquisition (AGILE+SCRUM+GIT+GITHUB) | Designing and implementing a multi-threaded system using FreeRTOS on STM32 that | 1.Reads sensor data (e.g., temperature) via an I2C/SPI driver |
| 2.Displays the data on a serial terminal using UART | 3.Controls an actuator (e.g., a fan using PWM) based on the sensor value | 4.Uses an RTOS to manage tasks for sensing, communication, and control. |
