Სარჩევი:

STM32F4 Discovery Board და Python USART Communication (STM32CubeMx): 5 ნაბიჯი
STM32F4 Discovery Board და Python USART Communication (STM32CubeMx): 5 ნაბიჯი

ვიდეო: STM32F4 Discovery Board და Python USART Communication (STM32CubeMx): 5 ნაბიჯი

ვიდეო: STM32F4 Discovery Board და Python USART Communication (STM32CubeMx): 5 ნაბიჯი
ვიდეო: STM32CubeIDE basics - 11 USART HAL lab 2024, ნოემბერი
Anonim
STM32F4 Discovery Board და Python USART Communication (STM32CubeMx)
STM32F4 Discovery Board და Python USART Communication (STM32CubeMx)
STM32F4 Discovery Board და Python USART Communication (STM32CubeMx)
STM32F4 Discovery Board და Python USART Communication (STM32CubeMx)

გამარჯობა! ამ გაკვეთილში ჩვენ შევეცდებით დავამყაროთ USART კავშირი STM32F4 ARM MCU- სა და პითონს შორის (ის შეიძლება შეიცვალოს სხვა ენით). მაშ, დავიწყოთ:)

ნაბიჯი 1: პროგრამული უზრუნველყოფისა და აპარატურის მოთხოვნები

აპარატურის თვალსაზრისით გჭირდებათ:

  • STM32F4 აღმოჩენის დაფა (ან ნებისმიერი სხვა STM32 დაფა)
  • USB to TTL გადამყვანი

რაც შეეხება პროგრამულ უზრუნველყოფას:

  • STM32CubeMX
  • კეილი uVision 5
  • პითონი დაინსტალირებულია სერიული ბიბლიოთეკით

ნაბიჯი 2: STM32CubeMX კონფიგურაცია

ჯერ გავიგოთ რისი გაკეთებაც გვინდა. ჩვენ გვსურს მონაცემების გადაცემა პითონიდან USART– ით და შევამოწმოთ გვაქვს თუ არა სწორი მონაცემები და led– ის გადართვა. ასე რომ, ჩვენ გვჭირდება ჩართვა USART და Led.

  • ჩართეთ USART2 დაკავშირებადობის ჩანართიდან.

    • შეცვალეთ რეჟიმი ასინქრონულად
    • ბოდის სიჩქარე 9600 ბიტ/წმ -მდე
    • სიტყვის სიგრძე 8 ბიტამდე პარიტეტის გარეშე
    • არანაირი პარიტეტი
    • DMA პარამეტრებიდან დაამატეთ USART2_RX სპეციალურ რეჟიმში
    • NVIC პარამეტრებიდან ჩართეთ USART2 გლობალური შეფერხება
  • ჩართეთ LED, დააჭირეთ ღილაკს PD12

შემდეგ შექმენით კოდი:)

ნაბიჯი 3: Keil პროგრამული უზრუნველყოფის განვითარება

#ჩართეთ

#ჩართეთ

ეს ბიბლიოთეკები საჭირო იქნება სიმებიანი ოპერაციებისთვის და ლოგიკური ცვლადის განსაზღვრისათვის.

/ *USER CODE BEGIN 2 */ HAL_UART_Receive_DMA (& huart2, (uint8_t *) data_buffer, 1); / * USER CODE END 2 */

აქ, UART მიღება DMA– ით დაიწყო.

/ *USER CODE BEIN 4 */void HAL_UART_RxCpltCallback (UART_HandleTypeDef *huart) {/ *გამოვიყენოთ გამოუყენებელი არგუმენტების (ების) შედგენის გაფრთხილება */UNUSED (huart); / * შენიშვნა: ეს ფუნქცია არ უნდა შეიცვალოს, როდესაც საჭიროა ზარის დაბრუნება, HAL_UART_RxCpltCallback შეიძლება განხორციელდეს მომხმარებლის ფაილში */ if (data_buffer [0]! = '\ N') {data_full [index_] = data_buffer [0]; ინდექსი _ ++; } სხვა {index_ = 0; დასრულდა = 1; } // HAL_UART_Transmit (& huart2, data_buffer, 1, 10); } / * მომხმარებლის კოდი ბოლოს 4 * /

ეს არის ISR, რომელიც გააქტიურებულია, როდესაც ვიღებთ ერთ ბაიტს. Ისე. ჩვენ ვიღებთ იმ ბაიტს და ვწერთ მას data_full რომელიც შეიცავს სრულად მიღებულ მონაცემებს სანამ არ მივიღებთ '\ n'. როდესაც მივიღებთ '\ n' - ს ვაკეთებთ დასრულებულ დროშას 1 და while loop:

ხოლო (1) { / * USER CODE END WHILE * / თუ (დასრულებულია) {if (strcmp (data_full, cmp_) == 0) {HAL_GPIO_TogglePin (GPIOD, GPIO_PIN_12); } memset (data_full, '\ 0', strlen (data_full)); დასრულდა = 0; } სხვა {_NOP (); } / * მომხმარებლის კოდი დაიწყო 3 * /}

თუ დასრულებული დროშა არის მაღალი ჩვენ შევადარებთ შინაარსს სრული მიღებული მონაცემებისა და მონაცემების ჩვენ გვსურს და თუ ისინი თანაბარია ჩვენ გადართვა led. ამის შემდეგ ჩვენ ვასუფთავებთ დასრულებულ დროშას და ველოდებით ახალ მონაცემებს და ასევე ვასუფთავებთ data_full მასივს, რათა არ გადავიწეროთ მასივში.

ნაბიჯი 4: პითონის პროგრამული უზრუნველყოფის შემუშავება

ამრიგად, აქ ჩვენ გვინდა გავაგზავნოთ ჩვენი ნომერი '/n' ბოლოს, რადგან Keil პროგრამულ უზრუნველყოფას დასჭირდება მისი ნახვა, რათა იცოდეს დასასრული.

სერიული იმპორტი

ser = serial. Serial ('COM17') #შეამოწმეთ თქვენი მოწყობილობის პორტი მოწყობილობის მენეჯერისგან

ser.write (b'24 / n ')

თქვენ უნდა ნახოთ, რომ LED იცვლება ყოველ ჯერზე '24 / n ' - ის გაგზავნისას. თუ სხვა რამეს გამოგიგზავნით არ უნდა იმოქმედოს მასზე.

ნაბიჯი 5: დასკვნა

ჩვენ მივაღწიეთ გაკვეთილის ბოლოს. თუ თქვენ გაქვთ რაიმე პრობლემა ან შეკითხვა, ნუ დააყოვნებთ კითხვას. ვეცდები შეძლებისდაგვარად დავეხმარო. Ძალიან დიდი მადლობა:)

გირჩევთ: