πŸŽ‹ ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ UART для STM32 HAL (использованиС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ)

НСмного накосячив Π² схСмС рСгистратора-Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠ° влаТности ΠΏΠΎΡ‡Π²Ρ‹ (с ΠΎΡΠ²Π΅Ρ‰Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈ Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€ΠΎΠΉ) с ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Π±Π»ΡŽΡ‚ΡƒΠ·-модуля JDY-23 ΠΊ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρƒ STM32F030F4P6 (ΡƒΠΊΠ°Π·Π°Π» Π½Π΅ Ρ‚Π΅ Π²Ρ‹Π²ΠΎΠ΄Ρ‹), Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΏΠΎΡ€Ρ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ (лСнь) Ρ€Π΅ΡˆΠΈΠ» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ УАПП, вмСсто Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ. Π‘Ρ‹ΡΡ‚Ρ€Π΅Π½ΡŒΠΊΠΎ нашСл Π½Π΅ΠΏΠ»ΠΎΡ…ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ с ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΌ описаниСм ΠΈ Π»Π΅Π³ΠΊΠΎΡΡ‚ΡŒΡŽ использования:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: https://github.com/liyanboy74/soft-uart

Настройка Π² STM32CubeIDE

Π’ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ (SYS -> Debug Serial Wire):

УстанавливаСм частоту тактирования HCLK=48MHz (наибольшая):

Π’ΠΊΠ»ΡŽΡ‡Π°ΡŽ Π’Π°ΠΉΠΌΠ΅Ρ€ 14, для скорости 9600 Π±ΠΎΠ΄/с Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ Ρ‚ΠΈΠΊ Ρ€Π°Π²Π½Ρ‹ΠΉ 20.83 мкс, Ρ‚ΠΎ частоту 48 ΠΊΠ“Ρ†. Π—Π°ΠΏΠΈΡˆΠ΅ΠΌ Π² ΠΏΡ€Π΅Π΄Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ (PCS) 0, Π° Π² рСгистр Π°Π²Ρ‚ΠΎΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ (ARR) 1000-1 (Ρ‚.ΠΊ. счёт с нуля) fCPU/Freq=48000000/48000=1000. Π Π°Π·Ρ€Π΅ΡˆΠ°Π΅ΠΌ прСрывания ΠΎΡ‚ этого Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°:

НастраиваСм ΠΎΠ΄ΠΈΠ½ Π²Ρ‹Π²ΠΎΠ΄ ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‰ΠΈΠΉ (SOFT_TX) Π΄Π²ΡƒΡ…Ρ‚Π°ΠΊΡ‚Π½Ρ‹ΠΉ Π²Ρ‹Ρ…ΠΎΠ΄, Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΉ (SOFT_RX) Π½Π° Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ Π²Ρ…ΠΎΠ΄ Π±Π΅Π· подтяТки:

Π“ΠΎΡ‚ΠΎΠ²ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ 

ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ

МоТно Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π½ΠΈΠΊ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» softuart.c Π² Inc ΠΈ softuart.h Src:

Π° Π΄Π°Π»Π΅Π΅ Π½Π°ΠΆΠ°Ρ‚ΡŒ ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ (Refresh). Π€Π°ΠΉΠ»Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ (Ρ‚ΠΎ ΠΆΠ΅ самоС ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ копируя Ρ„Π°ΠΉΠ»Ρ‹ Π² Π±ΡƒΡ„Π΅Ρ€ ΠΎΠ±ΠΌΠ΅Π½Π° ΠΈ вставляя прямо Π² ΠΎΠΊΠ½Π΅ Project Explorer):

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ UART:

/* USER CODE BEGIN Includes */ #include "softuart.h" /* USER CODE END Includes */

ΠžΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ этот Ρ„Π°ΠΉΠ» (Ctrl + Π›ΠšΠœ ΠΏΠΎ Π½Π°Π·Π²Π°Π½ΠΈΡŽ ΠΈΠ»ΠΈ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ + F3), здСсь ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ количСство Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… UART (ΠΌΠ½Π΅ Ρ…Π²Π°Ρ‚ΠΈΡ‚ ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ) ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ массивов Π±ΡƒΡ„Π΅Ρ€ΠΎΠ² (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ):

ΠŸΠ΅Ρ€Π΅Π΄ Π³Π»Π°Π²Π½Ρ‹ΠΌ Ρ†ΠΈΠΊΠ»ΠΎΠΌ Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ УАПП (ΠΈΡ…, кстати ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π°ΠΆ восСмь ΡˆΡ‚ΡƒΠΊ), ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Π² ΠΏΠΎΡ€Ρ‚Ρ‹ ΠΈ Π²Ρ‹Π²ΠΎΠ΄Ρ‹ для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΈ ΠΏΡ€ΠΈΠ΅ΠΌΠ° (ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Ρ€Π°Π½Π΅Π΅ Π² ΠΊΡƒΠ±Π΅):

/* USER CODE BEGIN 2 */ /* For software UART */ SoftUartInit(0, SOFT_TX_GPIO_Port, SOFT_TX_Pin, SOFT_RX_GPIO_Port, SOFT_RX_Pin); /* USER CODE END 2 */

ЗапускаСм прСрывания ΠΎΡ‚ Ρ€Π°Π½Π΅Π΅ настроСнного Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°:

/* USER CODE BEGIN 2 */ /* For software UART */ SoftUartInit(0, SOFT_TX_GPIO_Port, SOFT_TX_Pin, SOFT_RX_GPIO_Port, SOFT_RX_Pin); HAL_TIM_Base_Start_IT(&htim14); /* USER CODE END 2 */

Π’ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ прСрывания (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС для удобства ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ функция ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°) Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ-ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ UART:

/* SOFT UART TIMER HANDLER */ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { if(htim->Instance==TIM14) { SoftUartHandler(); } } /* USER CODE END 4 */

А Π΄Π°Π»Π΅Π΅ Π² Π³Π»Π°Π²Π½ΠΎΠΌ Ρ†ΠΈΠΊΠ»Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ строку Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ:

/* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { uint8_t Message[] = "Hola"; SoftUartPuts(0,(uint8_t *)Message, 4); HAL_Delay(100); /* USER CODE END WHILE */

Π’Π°ΠΊ ΠΊΠ°ΠΊ Ρƒ мСня этот ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ UART ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΊ BLE-ΠΌΠΎΠ΄ΡƒΠ»ΡŽ, Ρ‚ΠΎ сообщСния выводятся Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π±Π»ΡŽΡ‚ΡƒΠ·-Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅ (Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ GPS для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ!). Π§Ρ‚ΠΎ Π·Π° мусор выводится Π² Π½Π°Ρ‡Π°Π»Π΅ Π½Π΅ знаю, ΠΏΠΎΠΊΠ° ΠΎΠ½ Π½Π΅ ΠΌΠ΅ΡˆΠ°Π΅Ρ‚, Π½ΠΎ ΠΈΠΌΠ΅ΠΉΡ‚Π΅ Π²Π²ΠΈΠ΄Ρƒ.:

На осциллограммС, сдСланной с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Π½Π΄Ρ€ΠΎΠΈΠ΄-приставки HS101 Π²ΡΡ‘ Ρ…ΠΎΡ€ΠΎΡˆΠΎ:

ΠšΠΎΠΌΡƒ Π½ΡƒΠΆΠ΅Π½ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ для STM32CubeIDE, Ρ‚ΠΎ Π²ΠΎΡ‚ (Ρ‚Π°ΠΌ Π΅Ρ‰Π΅ АЦП настроСн, Ссли Ρ‡Ρ‚ΠΎ) [ΠΏΠ°Ρ€ΠΎΠ»ΡŒ: cxemka.com]Software_UART_STM32_HAL.zip

4089
RSS
НСт ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π². Π’Π°Ρˆ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ!
Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ°...