STM32CubeIDE programování

ondraN
Příspěvky: 932
Registrován: 08 srp 2019, 20:01
Reputation: 0

Re: STM32CubeIDE programování

Příspěvek od ondraN » 24 pro 2022, 17:54

To co se posílá přes sériový port, je typ uint8_t (byte). Takže když chceš poslat číselnou hodnotu jako textové vyjádření, musíš jí nejdříve zkonvertovat na textový řetězec. Použij na to funkci sprintf() pro formátovaný výstup do textového řetězce. Taky je dobré si nastavit používání novějších knihoven. Nastaveni je v CubeIDE v Project--Properties a dál podle obrázku, ty dvě dole
Corel.jpg

Uživatelský avatar
visk52
Příspěvky: 146
Registrován: 29 led 2020, 15:51
Reputation: 0

Re: STM32CubeIDE programování

Příspěvek od visk52 » 25 pro 2022, 11:39

ondraN píše:
24 pro 2022, 17:54
Použij na to funkci sprintf() pro formátovaný výstup do textového řetězce.
Jaká je správná syntaxe ? díky

ondraN
Příspěvky: 932
Registrován: 08 srp 2019, 20:01
Reputation: 0

Re: STM32CubeIDE programování

Příspěvek od ondraN » 25 pro 2022, 18:48

https://cplusplus.com/reference/cstdio/ ... kw=sprintf
Navíc musíš includovat modul stdio

Kód: Vybrat vše

#include	stdio.h

ondraN
Příspěvky: 932
Registrován: 08 srp 2019, 20:01
Reputation: 0

Re: STM32CubeIDE programování

Příspěvek od ondraN » 26 pro 2022, 07:55

Tady je příklad

Kód: Vybrat vše

uint8_t	txtLen;
char	text[20];
.........

		txtLen=sprintf(text,"     FW version: %d.%d \n", VERSION, SUBVERSION);
		HAL_UART_Transmit(huart, (uint8_t*)text, txtLen, 50);

Uživatelský avatar
visk52
Příspěvky: 146
Registrován: 29 led 2020, 15:51
Reputation: 0

Re: STM32CubeIDE programování

Příspěvek od visk52 » 26 pro 2022, 16:04

Nejde mi to proč ? :evil: :evil:
ADC UART.jpg

Kód: Vybrat vše

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
  uint16_t readValue;

/* USER CODE END 0 */
díky

ondraN
Příspěvky: 932
Registrován: 08 srp 2019, 20:01
Reputation: 0

Re: STM32CubeIDE programování

Příspěvek od ondraN » 26 pro 2022, 18:02

Kód: Vybrat vše

n=sprintf(buffer, "Zmerena hodnota = %d \n", readValue);
HAL_UART_Transmit(&huart1, (uint8_t*) buffer, n, 50);
V n bude po provedení sprintf() délka řetězce a v buffer bude textový řetězec. Protože je buffer typu char a HAL_UART_Transmit vyžaduje uint8_t, je třeba ten buffer přetypovat, ta hvězdička je tam kvůli tomu, že se přetypovává pointer.
U sprintf je ve formátovacím řetězci tzv. placeholder %d , to znamená že na tom místě se dosadí hodnota readValue a prezentuje se jako dekadický celočíselný typ.
Hele, nic proti nadšení, ale měl bys prostudovat céčko, protože tohle jsou poměrně základní věci a bez těch se v tom utopíš. Třeba sprintf je vlastně printf přesměrovaný do řetězce, podívej se na možnosti formátovacího řetězce a na placeholdery. Taky se zaměř na práci s pointery, protože to je tam používané na každém kroku.

Uživatelský avatar
visk52
Příspěvky: 146
Registrován: 29 led 2020, 15:51
Reputation: 0

Re: STM32CubeIDE programování

Příspěvek od visk52 » 26 pro 2022, 19:55

V letech kolik mě je tak se těžko něco učí jsem starý kmet :D já jsem vyrůstal na pascalu , pro mně něco ""Zmerena hodnota = %d \n """ tak je to řetězec.

ondraN
Příspěvky: 932
Registrován: 08 srp 2019, 20:01
Reputation: 0

Re: STM32CubeIDE programování

Příspěvek od ondraN » 26 pro 2022, 21:14

No, já taky už to mám za pár, takže vím jaká je to fuška, něco dostat do palice. Zkus si stáhnout tohle
https://ulozto.cz/file/Wdf32QKWFFwA/tst ... 9IDmp2MN==
https://ulozto.cz/file/dPxiLb4MwPsz/tst ... WDFwqxBN==
Je to fakt dobá kniha.

Uživatelský avatar
visk52
Příspěvky: 146
Registrován: 29 led 2020, 15:51
Reputation: 0

Re: STM32CubeIDE programování

Příspěvek od visk52 » 27 pro 2022, 12:23

Konečně nějaký výsledek
ADC-UART.jpg
díky

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 4 hosti