LAB: EXTI & SysTick
Date: 2023-09-26
Author/Partner:
Github: repository link
Demo Video: Youtube link
PDF version:
Introduction
In this lab, you are required to create two simple programs using interrupt:
(1) displaying the number counting from 0 to 9 with Button Press
(2) counting at a rate of 1 second
You must submit
LAB Report (*.md & *.pdf)
Zip source files(main*.c, ecRCC2.h, ecGPIO2.h, ecSysTick2.c etc...).
Only the source files. Do not submit project files
Requirement
Hardware
MCU
NUCLEO-F411RE
Actuator/Sensor/Others:
4 LEDs and load resistance
7-segment display(5101ASR)
Array resistor (330 ohm)
breadboard
Software
Keil uVision, CMSIS, EC_HAL library
Tutorial: STM-Arduino
We are going to create a simple program that turns LED(LD2) on triggered by External Interrupt of user button(BT1)/
digitalPinToInterrupt(pin)
: translate the digital pin to the specific interrupt number.ISR
: a function called whenever the interrupt occurs.mode
: defines when the interrupt should be triggered. (LOW, CHANGE, RISING, FALLING)
Procedure
Create a new project under the directory
\EC\LAB\LAB_EXTI
Open Arduino IDE and Create a new program named as ‘TU_arduino_EXTINT.ino’.
Write the following code.
The user button pin is
PC13
, but this pin cannot be used in arduino. So, you should connectPC13
topinName
D3
by using wire.
Click on upload button.
Whenever the user button(BT1) is pressed (at fall), LED should be ON. When the button is released, the LED should be OFF.
Tutorial: STM32F4xx
1.Tutorial: Managing library header files
Read how to manage library header files for MCU register configurations. Apply it in your LAB.
2.Tutorial: Custom Initialization
Instead of writing initial setting functions for each registers, you can call a user defined function e.g. MCU_init()
for the commonly used default initialization. Follow the tutorial and apply it in your LAB.
Problem 1: Counting numbers on 7-Segment using EXTI Button
1-1. Create HAL library
Download sample header files: ecEXTI2_student.h, ecEXTI2_student.c
Rename these files as ecEXTI2.h, ecEXTI2.c
You MUST write your name and other information at the top of the library code files.
Save these files in your directory
EC \lib\
.
Declare and define the following functions in your library : ecEXTI2.h
ecEXTI.h
1-2. Procedure
Create a new project under the directory
\EC\LAB\LAB_EXTI
The project name is “LAB_EXTI”.
Create a new source file named as “LAB_EXTI.c”
You MUST write your name on the source file inside the comment section.
2. Include your updated library in \EC\lib\
to your project.
ecGPIO2.h, ecGPIO2.c
ecRCC2.h, ecRCC2.c
ecEXTI2.h, ecEXTI2.c
Use the decoder chip (74LS47). Connect it to the breadboard and 7-segment display.
Then, you need only 4 Digital out pins of MCU to display from 0 to 9.
First, check if every number, 0 to 9, can be displayed properly on the 7-segment.
Then, create a code to display the number counting from 0 to 9 and repeating.
Count up only by pressing the push button (External Interrupt)
You must use your library function of EXTI.
Refer to an sample code
Configuration
Digital In for Button (B1) | Digital Out for 7-Segment decoder |
---|---|
Digital In | Digital Out |
PC13 | PA7, PB6, PC7, PA9 |
PULL-UP | Push-Pull, No PullUp-PullDown, Medium Speed |
Circuit Diagram
You need to include the circuit diagram
Discussion
We can use two different methods to detect an external signal: polling and interrupt. What are the advantages and disadvantages of each approach?
Answer discussion questions
What would happen if the EXTI interrupt handler does not clear the interrupt pending flag? Check with your code
Answer discussion questions
Code
Your code goes here.
Explain your source code with the necessary comments.
Results
Experiment images and results go here
Show experiment images /results
Add demo video link
Problem 2: Counting numbers on 7-Segment using SysTick
Display the number 0 to 9 on the 7-segment LED at the rate of 1 sec. After displaying up to 9, then it should display ‘0’ and continue counting.
When the button is pressed, the number should be reset ‘0’ and start counting again.
2-1. Create HAL library
Download sample header files: ecSysTick_student.h, ecSysTick_student.c
Rename these files as ecSysTick2.h, ecSysTick2.c
You MUST write your name and other information at the top of the library code files.
Save these files in your directory
EC \lib\
.
Declare and define the following functions in your library : ecSysTick2.h
ecSysTick.h
2-2. Procedure
Create a new project under the directory
\EC\LAB\LAB_EXTI_SysTick
The project name is “LAB_EXTI_SysTick”.
Create a new source file named as “LAB_EXTI_SysTick.c”
You MUST write your name on the source file inside the comment section.
2. Include your updated library in \EC\lib\
to your project.
ecGPIO2.h, ecGPIO2.c
ecRCC2.h, ecRCC2.c
ecEXTI2.h, ecEXTI2.c
ecSysTick2.h, ecSysTick2.c
Use the decoder chip (74LS47). Connect it to the bread board and 7-segment display.
Then, you need only 4 Digital out pins of MCU to display from 0 to 9.
First, check if every number, 0 to 9, can be displayed properly on the 7-segment.
Then, create a code to display the number counting from 0 to 9 and repeats at the rate of 1 second.
When the button is pressed, it should start from '0' again.
Use EXTI for this button reset.
Configuration
Digital In for Button (B1) | Digital Out for 7-Segment decoder |
---|---|
Digital In | Digital Out |
PC13 | PA7, PB6, PC7, PA9 |
PULL-UP | Push-Pull, No Pull-up-Pull-down, Medium Speed |
Circuit Diagram
You need to include the circuit diagram
Code
Your code goes here.
Explain your source code with necessary comments.
Results
Experiment images and results
Show experiment images /results
Add demo video link
Reference
Complete list of all references used (github, blog, paper, etc)
Troubleshooting
(Option) You can write a Troubleshooting section
Last updated