zapis na port u stm32F4

Hynek Sladky econf na centrum.cz
Úterý Únor 14 10:55:50 CET 2017


Mam registr: GPIOF->ODR
Ted ziskam jeho adresu: &GPIOF->ODR
Adresa = ukazatel je podle typu promenne, tedy zde na uint32_t.
Pro prekladac zmenim typ - ukazatel na byte - aby vedel, jake instrukce 
pouzit: (uint8_t*)&GPIOF->ODR
Dale napisu obecnejsi - snad i pochopitelnejsi - zapis pro pristup k 
jednotlivym bytum: ((uint8_t*)&GPIOF->ODR)[0] = 0x12;

Aby se s tim pracovalo jednoduseji, tak z toho muzeme udelat makro:
#define PORT_BYTE(port) ((volatile uint8_t*)&(port))
Pak muzu psat jednodussi zapis:
PORT_BYTE(GPIOF->ODR)[0] = 0x12;
A muzu to vyuzit take pro dalsi porty bez nutnosti definovat si nove a 
nove definice...
Makro se da upravit tak, aby cislo bytu bylo take jako parametr:
#define PORT_BYTE(port,byte) ((volatile uint8_t*)&(port))[byte]
PORT_BYTE(GPIOF->ODR,0) = 0x12;

Hynek Sladky


Dne 14.2.2017 10:23, Fanda Kopriva napsal(a):
>
> *(volatile uint8_t *)&GPIOF->ODR = 0x12;
> diky za nakopnuti
> Ale tyto konstrukce jsou pro mne bohuzel neprehledne a zavani mi 
> temnou magii.:-)
> Stareho psa novym ...atd.
> nakonec jsem si dodefinoval registry s bytovym pristupem a funguje to.
>
> sfr unsigned char volatile GPIOF_ODRL absolute  0x40021414;
> sfr unsigned char volatile GPIOF_ODRH absolute  0x40021415;
>    GPIOF_ODRH = 0x12
>
>    fanda

------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20170214/a67e2f81/attachment.html>


Další informace o konferenci Hw-list