STM32 cube & CAN

Petr Labaj labaj na volny.cz
Sobota Prosinec 5 14:41:57 CET 2015


Jen abychom si rozuměli, co je myšleno slovem "staromilec".
Staromilec při přechodu na nový procesor nestuduje nové knihovny, ale 
studuje datasheet.
Takže na dotaz "jaké knihovny se dají použít pro procesor XXX" pak 
bohužel musí
odpovědět "pardon, nevím, žádnou nemám a nepoužívám", ale na dotaz jak 
třeba spustit
hodiny nějaké periferii, tak odpoví "do registru AAA zapíšete jedničku 
na pozici BBB"
(a taky ví, jestli je třeba ty hodiny spouštět nebo ne).

Takže když řeknete, že "mapování pinů se řeší ve funkci 
HAL_CAN_MspInit", tak mi to
absolutně nic neříká. Ani nevím, jestli to není sprosté slovo.
Mapování např. Tx bitu USARTu staromilec na F1 řeší nějak takto:

USART_PRI_GPIO->CRX [USART_PRI_TX_BIT/8] =
      (USART_PRI_GPIO->CRX [USART_PRI_TX_BIT/8] &
      ~(0x0f << ((USART_PRI_TX_BIT%8)*4)))
      | ((GPIO_OUT_AF_PP | GPIO_SPEED_10MHz)
      << ((USART_PRI_TX_BIT%8)*4));

Samozřejmě ne takhle blbě a nepřehledně naformátováno, to je jen kvůli 
omezené
délce řádku v mailu.
Takže namapování jednoho pinu je jedno čtení a jeden zápis do registru 
(tedy jeden cyklus
read-modify-write) a ne volání nějaké šílené knihovny.
Ten jeden řádek kódu napřed přečte stávající konfiguraci 8 pinů (v 
jednom registru se
na F1 nastavuje mapovaní pro 8 pinů),  vymaže původní nastavení pro 
požadovaný pin a pak
tam přidá nastavení OUT, Alternate function Push-pull, střední rychlost.

No a samozřejmě namapovat lze to, co umí procesor. A nikoli jen průnik toho
co umí procesor a to napadlo tvůrce knihovny.

PL

*********************************

Dne 5.12.2015 v 10:48 Ondrej napsal(a):
> To je dobrý nápad nenamapovat pin - takhle by to asi šlo. Určitě 
> vyzkouším.
>
> Jinak mapování pinů se řeší ve funkci "HAL_CAN_MspInit", která není 
> součástí knihoven, ale "uživatelského kódu". Takže toto řešení je 
> přípustné i pro staromilce :-)
>
> Přes ten "pasivní mód" mi to ale nešlo. On pak totiž sice nevysílá na 
> sběrnici, ale interně pro sebe ano. Takže pokud někdo jiný odešle 
> zprávu, ale nikdo k ní neudělá ACK, tak STM si interně ten ACK pro 
> sebe vygeneruje a tváří se, že zpráva je přijata správně. Ale na 
> sběrnici žádný ACK není a tudíž reálně zpráva přijata není.
>
> Ondřej
>
>
>
> Dne 4.12.2015 v 21:55 Petr Labaj napsal(a):
>> Já jsem konzerva a staromilec, a tak používám procesor a ne knihovny.
>> Když bych chtěl jen šmírovat, tak prostě nohu Tx vůbec nepovolím jako 
>> výstupní.
>> Jistě to není tak elegantní jako nějaký speciální režim nějaké 
>> knihovny, ale
>> bude zaručeně funkční, a je to snadno pochopitelná změna na jednom 
>> řádku.
>>
>> PL



Další informace o konferenci Hw-list