Tự học lập trình STM32F1 bao gồm code mẫu CMSIS, StdPeriph, HAL, Low-Layer, FreeRTOS
Bản rút gọn public này không hỗ trợ đầy đủ source trên MDK-ARM/MDK-ARM Legacy IDE sẽ bị hạn chế một số nội dung và chỉ có tệp main.c mang tính chất tham khảo.
Bản đầy đủ private hỗ trợ source trên MDK-ARM/MDK-ARM Legacy IDE, ngoài ra sẽ có thêm tài liệu tham khảo, tài liệu cách sử dụng.
Việc học tập với HAL cực kỳ đơn giản, do đó nên học HAL đầu tiên (tham khảo lộ trình: HAL -> Stdperiph -> CMSIS -> LL -> FreeRTOS).
Nên sử dụng FreeRTOS vào các dự án có nhiều task vụ xử lý, việc nắm rõ các phần cơ bản và ghép chúng thành một project lớn đòi hỏi nhiều kỹ năng và kinh nghiệm.
Nội dung đầy đủ này chỉ dành cho chủ repo:
- CMSIS (MDK-ARM V5 Legacy IDE): https://github.com/phatvu1294/hoc-lap-trinh-stm32f1-cmsis
- StdPeriph (MDK-ARM V5 Legacy IDE): https://github.com/phatvu1294/hoc-lap-trinh-stm32f1-stdperiph
- HAL (STM32CubeMX + MDK-ARM V5 IDE): https://github.com/phatvu1294/hoc-lap-trinh-stm32f1-hal
- Low-Layer + FreeRTOS (MDK-ARM V5 Legacy IDE): https://github.com/phatvu1294/hoc-lap-trinh-stm32f1-ll-freertos
Lưu ý: Riêng bản HAL có dùng thêm STM32CubeMX để tạo project, còn lại chỉ dùng MDK MDK-ARM V5 Legacy IDE tạo project thủ công và code.
Phần mềm, công cụ, tài liệu cần thiết:
- MDK-ARM V5 IDE: https://www.keil.com/download/product/
- MDK-ARM V5 Legacy IDE: https://www2.keil.com/mdk5/legacy
- STM32CubeMX: https://www.st.com/en/development-tools/stm32cubemx.html
- STM32CubeProg: https://www.st.com/en/development-tools/stm32cubeprog.html
- STM32 ST-Link Utility: https://www.st.com/en/development-tools/stsw-link004.html
- ST-Link Driver: https://www.st.com/en/development-tools/stsw-link009.html
- STM32 Virtual ComPort Driver: https://www.st.com/en/development-tools/stsw-stm32102.html
- STM32StdPeriph: https://www.st.com/en/embedded-software/stm32-standard-peripheral-libraries.html
- STM32CubeF1: https://www.st.com/en/embedded-software/stm32cubef1.html
- STM32F1 Reference Manual (RM0008): https://www.st.com/resource/en/reference_manual/cd00171190-stm32f101xx-stm32f102xx-stm32f103xx-stm32f105xx-and-stm32f107xx-advanced-arm-based-32-bit-mcus-stmicroelectronics.pdf (tham khảo các ngoại vi tích hợp trên STM32)
- STM32F1 ARM Cortex-M3 Programming Manual (PM0056): https://www.st.com/resource/en/programming_manual/cd00228163-stm32f10xxx-20xxx-21xxx-l1xxxx-cortex-m3-programming-manual-stmicroelectronics.pdf (tham khảo các thành phần liên quan đến lõi Cortex-M3)
- STM32F103C8T6 Datasheet: https://www.st.com/resource/en/datasheet/stm32f103c8.pdf
- FreeRTOS V10.0 Reference Manual: https://www.freertos.org/fr-content-src/uploads/2018/07/FreeRTOS_Reference_Manual_V10.0.0.pdf
- CMSIS-RTOS2 V2: https://www.keil.com/pack/doc/CMSIS/RTOS2/html/group__CMSIS__RTOS.html
- Hecules/RealTerm: Debug dữ liệu từ USART
- HID Termial: Truyền nhận gói dữ liệu từ USB Custom HID
- HID Descriptor: Dùng để tạo Desciption USB Device
- ...
- startup: Thư viện cấu hình Clock hệ thống và Debug SW + JTAG khi khởi động
- delay: Thư viện delay sử dụng SysTick
- tim1delay: Thư viện delay sử dụng Timer1 thay thế cho SysTick (phù hợp cho FreeRTOS)
- usart1: Thư viện truyền thông nối tiếp USART1
- spi1: Thư viện giao tiếp SPI1 mode Master
- i2c1: Thư viện giao tiếp I2C1 mode Master
- lcd: Thư viện LCD HD44780
- pcf8574lcd: Thư viện LCD HD44780 + Module I2C PCF8574
- ssd1306: Thư viện màn hình OLED SSD1306 I2C
- mpu6050: thư viện cảm biến gia tốc và con quay hồi chuyền
- dht: Thư viện DHT11/22
- ds18b20: Thư viện DS18B20
- sht: Thư viện SHT1x/7x
- lm35: Thư viện cảm biến nhiệt LM35
- ntc: Thư viện cảm biến nhiệt NTC10K/100K
- usbvcp: Thư viện USB Vitural ComPort (tránh nhầm lẫn với thư viện có tiền tố usbd (device) và usbh (host) từ ST)
- usbchid: Thư viện USB Custom HID
- usbhid: Thư viện USB HID Mouse + Keyboard
- usbaudio: Thư viện USB Audio (Speaker + Microphone) tương thích với thiết bị hỗ trợ USB_OTG stream audio trực tiếp từ USB (như F105/F107, F407, F746, F769, ...) yêu cầu có IC Audio I2S
- infrared: Thư viện giải mã hồng ngoại NEC từ remote
- st7920: Thư viện màn hình LCD Graphic 12864
- pt2314: Thư viện giao tiếp IC xử lý âm thanh số
- fft: Thư viện biến đổi FFT (Fast Fourier Transform)
- at24cxx: Thư viện giao tiếp EEPROM AT24C02/08/32
- flash: Thư viện sử dụng Flash giả lập EEPROM
- ws2812: Thư viện giao tiếp với LED WS2812/1903
- ...
01#1_New_Project- 02#1_RCC_Configuration
02#2_RCC_Startup_Library- 03#1_GPIO_Output_Mode
- 03#2_GPIO_Input_Mode
- 04#1_SYSTICK_Delay
04#2_SYSTICK_Delay_Library- 05#1_EXTI_External_Interrupt
- 06#1_DMA_M2M_Mode
06#2_DMA_M2M_Interrupt_Mode07#1_NVIC_Interrupt_Priority- 08#1_UART_Polling_Mode
08#2_UART_Interrupt_Mode08#3_UART_Library- 09#1_TIM_Base_Interrupt
09#2_TIM_Output_Compare_Toggle09#3_TIM_PWM_Output09#4_TIM_Input_Capture09#5_TIM_PWM_Input09#6_TIM_Encoder_Mode- 10#1_ADC_Polling_Mode
10#2_ADC_Interrupt_Mode10#3_ADC_Analog_Watchdog- 10#4_ADC_Scan_Mode_DMA
10#5_ADC_Timer_Trigger_DMA10#6_ADC_Injected_Channel11#1_SPI_Simplex_Mode_HC59511#2_SPI_Two_SPI_Interface12#1_I2C_Library12#2_I2C_AT24CXX_EEPROM12#3_I2C_PCF8574_LCD12#4_I2C_MPU6050libraries
01#1_New_Project02#1_RCC_Configuration- 03#1_GPIO_Output_Mode
- 03#2_GPIO_Input_Mode
- 04#1_SYSTICK_Delay
04#2_SYSTICK_Library- 05#1_EXTI_External_Interrupt
- 06#1_DMA_M2M_Mode
06#2_DMA_M2M_Mode_Interrupt07#1_NVIC_Interrupt_Priority- 08#1_UART_Polling_Mode
08#2_UART_Interrupt_Mode08#3_UART_Library- 09#1_TIM_Base_Interrupt
09#2_TIM_PWM_Output09#3_TIM_Input_Capture09#4_TIM_PWM_Input09#5_TIM_Encoder_Mode- 10#1_ADC_Polling_Mode
10#2_ADC_Interrupt_Mode10#3_ADC_Analog_Watchdog- 10#4_ADC_Scan_Mode_DMA
10#5_ADC_Timer_Trigger_DMA10#6_ADC_Injected_Channel- 11#1_SPI_Simplex_HC595
11#2_SPI_Simplex_Two_SPI12#1_I2C_Master_AT24C0813#1_CAN_LoopBack_TX13#2_CAN_LoopBack_RX13#3_CAN_LoopBack_Interrupt13#4_CAN_Normal_Two_Boardlibraries
01#1_Getting_Started02#1_HAL_Bai_2.1_New_Project- 02#2_HAL_Bai_2.2_SysTick_Timer
- 03#1_RCC_Bai_3.1_System_Clocks_Configuration
03#2_RCC_Bai_3.2_Software_Reset- 04#1_GPIO_Bai_4.1_Output_Configuration
- 04#2_GPIO_Bai_4.2_Input_Configuration
- 05#1_EXTI_Bai_5.1_External_Interrupt_Configuration
06#1_NVIC_Bai_6.1_Interrupt_Priority_Configuration- 07#1_DMA_Bai_7.1_Memory_To_Memory_Mode
07#2_DMA_Bai_7.1_Memory_To_Memory_Mode_IT- 08#1_UART_Bai_8.1_Polling_Mode
08#2_UART_Bai_8.1_Data_Type_Conversion08#3_UART_Bai_8.2_Interrupt_Mode08#4_UART_Bai_8.2_RX_FIFO_Buffer08#5_UART_Bai_8.2_DMA_Mode- 09#1_TIM_Bai_9.1_Time_Based_Interrupt
09#2_TIM_Bai_9.1_Encoder_Interface_Mode09#3_TIM_Bai_9.2_Output_Compare_Toggle09#4_TIM_Bai_9.2_PWM_Output09#5_TIM_Bai_9.3_Input_Capture09#6_TIM_Bai_9.3_PWM_Input- 10#1_ADC_Bai_10.1_Polling_Mode
10#2_ADC_Bai_10.1_Interrupt_Mode10#3_ADC_Bai_10.2_Analog_Watchdog- 10#4_ADC_Bai_10.2_Scan_Mode
10#5_ADC_Bai_10.3_Timer_Trigger10#6_ADC_Bai_10.3_Injected_Channel- 11#1_SPI_Bai_11.1_74595_Shift_Register
- 12#1_I2C_Bai_12.1_AT24C08_EEPROM
12#2_I2C_Bai_12.1_AT24C08_EEPROM_DMA12#3_I2C_Bai_12.2_Two_Boards_Communication12#4_I2C_Bai_12.2_Two_Boards_Communication_Master13#1_WDG_Bai_13.1_Window_Watchdog13#2_WDG_Bai_13.1_Independent_Watchdog14#1_PWR_Bai_14.1_Sleep_Mode14#2_PWR_Bai_14.1_Stop_Mode14#3_PWR_Bai_14.1_Standby_Mode
01#1_New_Project02#1_RCC_Configuration02#2_RCC_Startup_Library- 03#1_GPIO_Output_Mode
- 03#2_GPIO_Input_Mode
- 04#1_SYSTICK_Delay
04#2_SYSTICK_Delay_Library- 05#1_EXTI_External_Interrupt
- 06#1_DMA_M2M_Mode
06#2_DMA_M2M_Interrupt_Mode07#1_NVIC_Interrupt_Priority- 08#1_UART_Polling_Mode
08#2_UART_Interrupt_Mode08#3_UART_Library- 09#1_TIM_Base_Interrupt
09#2_TIM_Output_Compare_Toggle09#3_TIM_PWM_Output09#4_TIM_Input_Capture09#5_TIM_PWM_Input09#6_TIM_Encoder_Mode- 10#1_ADC_Polling_Mode
10#2_ADC_Interrupt_Mode10#3_ADC_Analog_Watchdog- 10#4_ADC_Scan_Mode_DMA
10#5_ADC_Timer_Trigger_DMA10#6_ADC_Injected_Channel11#1_SPI_Simplex_Mode_HC59511#2_SPI_Two_SPI_Interface12#1_I2C_Master_Library12#2_I2C_AT24CXX_EERPOM_Library12#3_I2C_PCF8574_LCD_Library12#4_I2C_SSD1306_OLED_Library- 13#1_USB_Vitural_ComPort_Library
13#2_USB_Winform_VCP_Terminal13#3_USB_Custom_HID_Library13#4_USB_HID_Mouse13#5_USB_HID_Keyboard13#6_USB_AUDIO_Streaming- 14#1_RTOS2_Thread
- 14#2_RTOS2_Event_Flag
14#3_RTOS2_Message_Queue14#4_RTOS2_Mutex14#5_RTOS2_Binary_Semaphore14#6_RTOS2_Counting_Semaphore14#7_RTOS2_Software_Timer- 15#1_FREERTOS_Task
- 15#2_FREERTOS_Task_Notification
15#3_FREERTOS_Queue15#4_FREERTOS_Mutex15#5_FREERTOS_Software_Timerdriverslibraries