Monday, December 28, 2020

ប្រើ Serial តាម USB របស់ STM32F103C8T6 ជាមួយ STM32CubeIDE

USB របស់ STM32F103C8T6


STM32F103C8T6 ឬគេហៅឈ្មោះកាត់ថា Blue Pill មានភ្ជាប់មកជាមួយនឹង USB មួយដែលមិនដំណើរការ។ តាមពិតទៅ USB នេះជា Programmable Port មានន័យថាជា USB ដែលដំណើរការទៅតាមការសរសេរកូដឲ្យវាដំណើរការជាមុខងារណាមួយ មិនមែនជា USB សម្រាប់តែបញ្ចូលកូដនោះទេដូច Arduino នោះទេ។


Unknown USB ដោយសារតែមិនទាន់មាន​ Firmware ឲ្យ USB ដំណើរការ


នៅក្នុងអត្ថបទនេះនឹងប្រើនិយាយពីការប្រើប្រាស់ STM32CubeIDE ដើម្បីធ្វើការកំណត់ និងសរសេរកូដឲ្យដំណើរការ ជា Serial USB។

ឧបករណ៍ដែលត្រូវការ

ភ្ជាប់ STM32F103C8T6 ជាមួយនឹង ST-LINK V2 ដូចរូបខាងក្រោម៖

ភ្ជាប់ ST-LINK និង STM32
Image Credit to Tobias Wellnitz


បង្កើត​ Project នៅក្នុង STM32CubeIDE រួចចូលទៅក្នុង Pinout & Configuration :

កំណត់ Debug Serial Wire ប្រើជាមួយ ST-LNIK

កំណត់ RCC Mode

បើកដំណើរការ USB Device

កំណត់មុខងាររបស់ USB ជា Communication Device

Pinout View ដែលបានបើកដំណើរការ USB លើជើង PA11 និង PA12

Clock Configuration ដែលបានមកពី Auto-Generated


បន្ទាប់ពីបានធ្វើការកំណត់បានត្រឹមត្រូវនៅក្នុង CubeMX ហើយ ធ្វើការ Generate កូដទៅកាន់ IDE៖

មើលនៅក្នុង usbd_cdc_if.c ដែលមាន Function ដូចនៅក្នុង Outline

ធ្វើការលើកឧទាហរណ៍អោយ STM32F103C8T6 សរសេរអក្សរតាម USB Serial ទៅកាន់កុំព្យូទ័រដោយប្រើប្រាស់ CDC_Transmit_FS(uint8_t* Buf, uint16_t Len)។
  • បញ្ជូល #include "usbd_cdc_if.h" ទៅក្នុង main.c
  • នៅត្រង់ USER CODE BEGIN 2 បង្កើត Variable មួយដែលផ្ទុកទិន្ន័យដែលនឹងត្រូវបញ្ជូនតាម Serial ទៅ។
  • នៅត្រង់ USER CODE BEGIN 3 ធ្វើការបញ្ជូន Serial ដោយប្រើ CDC_Transmit_FS និងបិទបើក LED មួយគ្រាប់លើជើង PC13។
យើងបានកូដដូចខាងក្រោម៖

/* USER CODE BEGIN 2 */ uint8_t buff[]="This is STM32.\n"; /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE BEGIN 3 */ CDC_Transmit_FS(buff, sizeof(buff)); //Transmit Serial HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); //LED blink HAL_Delay(500); //Delay /* USER CODE END 3 */ } /* USER CODE END WHILE */


បន្ទាប់ពីបានសរសេរនឹងបញ្ចូលកូដទៅនៅក្នុង  STM32F103C8T6 តាមរយៈ ST-LINK រួចមក ដោត Micro USB ពី  STM32F103C8T6 ទៅកាន់កុំព្យូទ័រ នោះកុំព្យូទ័រនឹងស្គាល់  STM32F103C8T6 ថាជា USB Serial Device ទៅតាមការកំណត់របស់យើង។

Windows 10 ស្គាល់ STM32 ជា USB Serial Device (COM3)

អាចប្រើប្រាស់កម្មវិធី Putty ដើម្បីបើកមើល Serial តាម COM3 speed 9600

ទិន្ន័យដែលមើលតាម Putty ចេញពី STM32F103C8T6

ហើយក៏អាចប្រើ Serial Monitor របស់ Arduino បានផងដែរ