Trang chủGiới thiệuLiên hệ
Cài đặt và tạo project lập trình STM32F103 bằng Keil MDK-ARM 5.22

Giới thiệu

Bài viết này sẽ hướng dẫn các bạn cài đặt Keil MDK-ARM phiên bản 5.22 và tạo một project để lập trình STM32F103. Đầu tiên các bạn download phần mềm và pack thư viện cho STM32F103

  • Download Keil MDK-ARM 5.22 KeyMDK Pro
  • Download pack thư viện cho STM32F1xx

Ở project đầu tiên này sẽ hướng dẫ các bạn sử dụng các chân GPIO của con STM32F10 để đọc tín hiệu nút nhấn và xuất led. GPIO (General Purpose Input Output) trên STM32F103 có 4 chế độ (mode) đó là: input mode, output mode, analog input mode, alternate function mode. Để đọc tín hiệu từ nút nhấn chúng ta cần cài đặt chân GPIO gắn với nút nhất ở digital input mode Khi một chân GPIO của STM32F103 ở digital input mode thì nó có thể hoạt động ở một trong 3 trạng thái: input with internal pull-up, input with internal pull-down, and input floating. Điện áp logic của chip STM32F103 là 3.3V nên các chân GPIO cũng có mức điện áp ra là 3.3V, tuy nhiên một số chân có thể có mức điện áp tối đa tới 5V

STM32F103 I/O Pin
STM32F103 I/O Pin
Đặc tính của chân I/O khi hoạt động ở chế độ input

  • The output buffer is disabled.
  • The schmitt trigger input is activated.
  • The weak pull-up and pull-down resistors are activated or not depending on input configuration (pull-up, pull-down or floating).
  • The data present on the I/O pin is sampled into the input data register every APB2 clock cycle.
  • A read access to the input data register obtains the I/O state.

STM32F103 Inputmode
STM32F103 Inputmode

Sơ đồ nguyên lý

Button project
Button project

Nút nhấn nối với chân PA1 ở chế độ input với internal pull-up (điện trở nội kéo lên) vì vậy khi nút được nhấn thì chân PA1 ở mức logic ‘0’ và ngược lại. Đèn led nối với chân PA0

Code lập trình

Chương trình này sẽ lập trình để khi nút được nhấn thì đèn led sáng, không nhấn thì đèn led tăt

#include "stm32f10x.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_gpio.h"

GPIO_InitTypeDef GPIO_InitStruct;

int main(void)
{
    // Enable clock for GPIOA
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

    // Cofigure PA0 as open-drain output
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_OD;
    GPIO_Init(GPIOA, &GPIO_InitStruct);
 
    // Cofigure PA1 as input with internal pull-up resistor
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;
    GPIO_Init(GPIOA, &GPIO_InitStruct);

    while (1)
    {
        // If button on PA1 is pressed (button circuit is active low)
        if (!(GPIO_ReadInputData(GPIOA) & GPIO_Pin_1))
        {
            // Turn on LED on PA0 (LED circuit is active low)
            GPIO_ResetBits(GPIOA, GPIO_Pin_0);
        }
        else
        {
            // Turn off LED on PA0
            GPIO_SetBits(GPIOA, GPIO_Pin_0);
        }
    }
}

Video hướng dẫn


Anh Nguyễn

Anh Nguyễn

DIGITAL SOLUTIONS ARCHITECT

Mục lục

1

Giới thiệu

2

Sơ đồ nguyên lý

3

Code lập trình

4

Video hướng dẫn

Bài viết tương tự

Arduino: điều khiển nhiều LED dùng IC 74HC595
Anh Nguyễn
15/05/2021
2 phút
© 2021, Giữ mọi bản quyền

Thông tin

Hợp tácGiới thiệuLiên hệ

Mạng xã hội