на самом хабре было https://habr.com/ru/articles/459642/
я два проекта с использованием этого сделал. оно конечно хорошо, но иногда больно многословно получается
using P = CAN1;
...
{
using R = P::BTMG;
P::BTMGPack<
R::LOEN::Disable,
R::LBEN::Disable,
DETAIL::RSAW_V,
DETAIL::BTS2_V<BTS2>::type,
DETAIL::BTS1_V<BTS1>::type,
R::BRDIV::VALUE<DEVIDER - 1>
>::Write();
}
ну и вендоровский HAL приходится переписывать.