ุงูุชูู. ู
ุฃุฎูุฐุฉ ู
ู www.extremetech.com/wp-content/uploads/2016/07/MegaProcessor-Feature.jpgุตุญุฉ ุฌูุฏุฉ ููุฌู
ูุน!
ูู ู
ูุงูุฉ ุณุงุจูุฉ ุ ุฏุฑุณุช ู
ุณุฃูุฉ ุงููุตูู ุฅูู ุณุฌูุงุช ู
ุชุญูู
ู
ุน ููุฑุชููุณู
ููุฑ ูู ุณู + + ูุฃุธูุฑุช ุญูููุงู ุจุณูุทุฉ ูุจุนุถ ุงูู
ุดุงูู.
ุฃุฑูุฏ ุงูููู
ุฃู ุฃูุถุญ ููุฑุฉ ุนู ููููุฉ ุฌุนู ุงููุตูู ุฅูู ุงูุณุฌู ูุญูููู ุขู
ููุง ุฏูู ุงูุชุถุญูุฉ ุจุงูููุงุกุฉ ุ ูุฐูู ุจุงุณุชุฎุฏุงู
ูุฆุงุช C ++ ุงูุชู ุชู
ุฅูุดุงุคูุง ู
ู ู
ููุงุช SVD.
ูู ู
ู ููู
ู ุงูุฃู
ุฑ ุ ู
ุฑุญุจุง ุจูู
ูู ุงููุท. ุณูููู ููุงู ุงููุซูุฑ ู
ู ุงูุชุนููู
ุงุช ุงูุจุฑู
ุฌูุฉ.
ู
ูุฏู
ุฉ
ูู ู
ูุงูุฉ
C ++ Hardware Access Access Redux ุ ุฃูุถุญ ููู ุณู
ูุซ ููููุฉ ุงูุนู
ู ุจุฃู
ุงู ูููุงุกุฉ ู
ุน ุงูุณุฌูุงุช ุ ูุญุชู ุฃุธูุฑูุง ู
ุน
github.com/kensmith/cppmmio ูู
ุซุงู.
ุซู
ุทูุฑ ุงูุนุฏูุฏ ู
ู ุงูุฃุดุฎุงุต ูุฐู ุงูููุฑุฉ ุ ุนูู ุณุจูู ุงูู
ุซุงู ุ ูุงู
Niklas Hauser ุจุฅุฌุฑุงุก ู
ุฑุงุฌุนุฉ ุฑุงุฆุนุฉ ูุงูุชุฑุญ ุนุฏุฉ ุทุฑู ุฃุฎุฑู ูููุตูู ุฅูู ุงูุณุฌูุงุช ุจุฃู
ุงู.
ููุฏ ุชู
ุจุงููุนู ุชูููุฐ ุจุนุถ ูุฐู ุงูุฃููุงุฑ ูู ู
ูุชุจุงุช ู
ุฎุชููุฉ ุ ูุฎุงุตุฉ ูู
ุงูู
ูุฏู
. ู
ู ุฃุฌู ุงูุฎูุฑ ุ ูู
ููู ุงุณุชุฎุฏุงู
ูู ูุฐู ุงูุฌู
ู ูู ุงูุญูุงุฉ ุงูุญููููุฉ. ูููู ูู ููุช ุชุทููุฑ ูุฐู ุงูู
ูุชุจุงุช ุ ุจุฏุฃุช ุชูุญุฏ ุงูุฃูุตุงู ุงูุทุฑููุฉ ูุงูุณุฌูุงุช ูุชูุญูุฏูุง ุ ูุจุงูุชุงูู ุชู
ุงูููุงู
ุจุจุนุถ ุงูุฃุดูุงุก ุจูุฏู ุฃู ูููู ุงูุนู
ู ุงูุฑุฆูุณู ูู ูุตู ุงูุณุฌูุงุช ู
ุน ุงูู
ุจุฑู
ุฌ. ุฃูุถุง ุ ุจุนุถ ุงูุญููู ููุณุช ูุนุงูุฉ ู
ู ุญูุซ ุงูููุฏ ูู
ูุงุฑุฏ ู
ุชุญูู
.
ุงูููู
ุ ุชููุฑ ูู ุดุฑูุฉ ุชุตููุน ู
ุชุญูู
ARM ูุตููุง ูุฌู
ูุน ุงูุณุฌูุงุช ุจุชูุณูู SVD. ูู
ูู ุฅูุดุงุก ู
ููุงุช ุงูุฑุฃุณ ู
ู ูุฐู ุงูุฃูุตุงู ุ ูุฐูู ุ ูุง ูู
ูู ุฅูุดุงุก ูุตู ุจุณูุท ููุณุฌูุงุช ุ ุจู ูุตู ุฃูุซุฑ ุชุนููุฏูุง ุ ูููู ูู ููุณ ุงูููุช ุ ู
ู
ุง ุณูุฒูุฏ ู
ู ู
ูุซูููุฉ ุงูููุฏ. ูู
ู ุงูุฑุงุฆุน ุฃู ูููู ู
ูู ุงูุฅุฎุฑุงุฌ ุจุฃู ูุบุฉ ุฃู ูุบุฉ C ุฃู C ++ ุฃู ุญุชู
Dููู ููุฃุฎุฐ ุงูุฃู
ุฑ ุจุชุฑุชูุจ ุงููุตูู ุงูุขู
ู ุฅูู ุงูุณุฌูุงุช ุ ููู
ุงุฐุง ูุนุฏ ุถุฑูุฑููุง ุนูู ุงูุฅุทูุงู. ูู
ูู ุนุฑุถ ุงูุชูุณูุฑ ุนูู ุฃู
ุซูุฉ ุงุตุทูุงุนูุฉ ุจุณูุทุฉ ุ ุนูู ุงูุฃุฑุฌุญ ุบูุฑ ู
ุญุชู
ูุฉ ุ ูููู ู
ู ุงูู
ู
ูู ุญุฏูุซูุง ุชู
ุงู
ูุง:
int main(void) {
ูู ูุฐู ุงูุญุงูุงุช ู
ู
ููุฉ ูู ุงูู
ู
ุงุฑุณุฉ ุงูุนู
ููุฉ ุ ูุฃูุง ุจุงูุชุฃููุฏ ุดุงูุฏุช ุดูุฆูุง ููุฐุง ู
ู ุทูุงุจู. ุณูููู ุฃู
ุฑุง ุฑุงุฆุนุง ุฅุฐุง ุฃู
ููู ุฃู ุชู
ูุน ุงุฑุชูุงุจ ู
ุซู ูุฐู ุงูุฃุฎุทุงุก.
ูุจุฏู ูู ุฃูุถูุง ุฃูู ุฃูุซุฑ ู
ุชุนุฉ ุนูุฏู
ุง ูุจุฏู ุงูุฑู
ุฒ ุฃููููุง ููุง ูุญุชุงุฌ ุฅูู ุชุนูููุงุช. ุนูู ุณุจูู ุงูู
ุซุงู ุ ุญุชู ูู ููุช ุชุนุฑู ู
ุชุญูู
STM32F411 ุฌูุฏูุง ุ ูููุณ ู
ู ุงูู
ู
ูู ุฏุงุฆู
ูุง ููู
ู
ุง ูุญุฏุซ ูู ูุฐุง ุงูุฑู
ุฒ:
int main() { uint32 temp = GPIOA->OSPEEDR ; temp &=~ GPIO_OSPEEDR_OSPEED0_Msk ; temp = (GPIO_OSPEEDR_OSPEED0_0 | GPIO_OSPEEDR_OSPEED0_1) ; GPIOA->OSPEEDR = temp; }
ูุง ุชุนููู ููุง ูุง ูู
ูู ุงูููุงู
ุจู. ูุนูู ุงูุฑู
ุฒ ุชุฑุฏุฏ ุชุดุบูู ู
ููุฐ GPIOA.0 ุฅูู ุงูุญุฏ ุงูุฃูุตู (ุชูุถูุญ ู
ู
mctMaks : ูู ุงููุงูุน ุ ุชุคุซุฑ ูุฐู ุงูู
ุนูู
ุฉ ุนูู ููุช ุตุนูุฏ ุงูู
ูุฏู
ุฉ (ุจู
ุนูู ุ ุฏุฑุฌุฉ ุงูุญุฏุงุฑูุง) ุ ูุชุนูู ุฃูู ูู
ูู ููู
ููุฐ ู
ุนุงูุฌุฉ ุฅุดุงุฑุฉ ุฑูู
ูุฉ ุจุดูู ุทุจูุนู ุนูุฏ ุฅุดุงุฑุฉ ู
ุนููุฉ (VeryLow \ Low \ Medium \ ุนุงููุฉ) ุงูุชุฑุฏุฏ).
ุฏุนููุง ูุญุงูู ุงูุชุฎูุต ู
ู ูุฐู ุงูุนููุจ.
ุณุฌู ุงูุชุฌุฑูุฏ
ุจุงุฏุฆ ุฐู ุจุฏุก ุ ุชุญุชุงุฌ ุฅูู ู
ุนุฑูุฉ ู
ุง ูู ุงูุณุฌู ู
ู ูุฌูุฉ ูุธุฑ ุงูู
ุจุฑู
ุฌ ูุงูุจุฑูุงู
ุฌ.
ูุญุชูู ุงูุณุฌู ุนูู ุนููุงู ุฃู ุทูู ุฃู ุญุฌู
ูุทุฑููุฉ ูุตูู: ูู
ูู ูุชุงุจุฉ ุจุนุถ ุงูุณุฌูุงุช ูุงูุจุนุถ ุงูุขุฎุฑ ูู
ูู ูุฑุงุกุชูุง ููุท ููู
ูู ูุฑุงุกุฉ ู
ุนุธู
ูุง ููุชุงุจุชูุง.
ุจุงูุฅุถุงูุฉ ุฅูู ุฐูู ุ ูู
ูู ุชู
ุซูู ุงูุณุฌู ูู
ุฌู
ูุนุฉ ู
ู ุงูุญููู. ูู
ูู ุฃู ูุชููู ุงูุญูู ู
ู ุจุช ูุงุญุฏ ุฃู ุนุฏุฉ ุจุชุงุช ูููุน ูู ุฃู ู
ูุงู ูู ุงูุณุฌู.
ูุฐูู ุ ูุฅู ุฎุตุงุฆุต ุงูุญูู ุงูุชุงููุฉ ู
ูู
ุฉ ุจุงููุณุจุฉ ููุง: ุงูุทูู ุฃู ุงูุญุฌู
(
ุงูุนุฑุถ ุฃู
ุงูุญุฌู
) ุ ุงูุฅุฒุงุญุฉ ู
ู ุจุฏุงูุฉ ุงูุชุณุฌูู (
ุงูุฅุฒุงุญุฉ ) ุ ูุงูููู
ุฉ.
ููู
ุงูุญููู ูู ู
ุณุงุญุฉ ููู ุงููู
ูุงุช ุงูู
ู
ููุฉ ุงูุชู ูู
ูู ุฃู ูุฃุฎุฐูุง ุงูุญูู ููุนุชู
ุฏ ุฐูู ุนูู ุทูู ุงูุญูู. ุฃู ุฅุฐุง ูุงู ุงูุญูู ุจุทูู 2 ุ ูููุงู 4 ููู
ุญูู ู
ู
ููุฉ (0ุ1ุ2ุ3). ู
ุซู ุงูุณุฌู ุ ุชุญุชูู ุงูุญููู ูููู
ุงูุญูู ุนูู ูุถุน ูุตูู (ูุฑุงุกุฉ ููุชุงุจุฉ ููุฑุงุกุฉ ููุชุงุจุฉ)
ูุฌุนููุง ุฃูุซุฑ ูุถูุญูุง ุ ุฏุนูุง ูุฃุฎุฐ ุณุฌู TIM1 CR1 ู
ู ู
ุชุญูู
STM32F411. ุจุดูู ุชุฎุทูุทู ุ ูุจุฏู ูู
ุง ููู:

- ุจุช 0 CEN: ุชู
ููู ุนุฏุงุฏ
0: ุชู
ููู ุงูุนุฏุงุฏ: ุชุนุทูู
1: ุนุฏุงุฏ: ุชู
ููู
- UDIS ุจุช 1: ุชู
ููู / ุชุนุทูู ุญุฏุซ UEV
0: ุชู
ุชู
ููู ุญุฏุซ UEV: ุชู
ููู
1: ุญุฏุซ ุฎุงุฑุฌ UEV: ุชุนุทูู
- ุจุช URS 2: ุญุฏุฏ ู
ุตุงุฏุฑ ุชูููุฏ ุฃุญุฏุงุซ UEV
0: ูุชู
ุฅูุดุงุก UEV ุนูุฏู
ุง ุชููุถ ุฃู ุนูุฏ ุชุนููู UG: ุฃู ุจุช
1: ูุชู
ุฅูุดุงุก UEV ููุท ุนูู ุชุฌุงูุฒ ุงูุณุนุฉ : ุชุฌุงูุฒ ุงูุณุนุฉ
- ุจุช 3 OPM: ุชุดุบูู ู
ุฑุฉ ูุงุญุฏุฉ
0: ูุณุชู
ุฑ ุงูู
ููุช ูู ุงูุงุนุชู
ุงุฏ ุฃูุซุฑ ุจุนุฏ ุงูุญุฏุซ UEV: ContinueAfterUEV
1: ุชููู ุงูู
ููุช ุจุนุฏ ุงูุญุฏุซ UEV : StopAfterUEV
- ุจุช 4 DIR: ุงุชุฌุงู ุงูุนุฏ
0: ุงูุญุณุงุจ ุงูู
ุจุงุดุฑ: Upcounter
1: ุงูุนุฏ ุงูุชูุงุฒูู : Downcounter
- ุจุช 6: 5 ุณู
: ูุถุน ุงูู
ุญุงุฐุงุฉ
0: ูุถุน ุงูู
ุญุงุฐุงุฉ 0: CenterAlignedMode0
1: ูุถุน ุงูู
ุญุงุฐุงุฉ 1: CenterAlignedMode1
2: ูุถุน ุงูู
ุญุงุฐุงุฉ 2: CenterAlignedMode2
3: ูุถุน ุงูู
ุญุงุฐุงุฉ 3: CenterAlignedMode3
- ุจุช 7 APRE: ูุถุน ุงูุชุญู
ูู ุงูู
ุณุจู ูุชุณุฌูู ARR
0: ูุง ูุชู
ุชุฎุฒูู ุณุฌู TIMx_ARR ู
ุคูุชูุง: ARRNotBuffered
1: ูุง ูุชู
ุชุฎุฒูู ุณุฌู TIMx_ARR ู
ุคูุชูุง: ARRBuffered
- ุจุช 8: 9 ูุฏ: ู
ูุณู
ุงูุณุงุนุฉ
0: tDTS = tCK_INT: ClockDevidedBy1
1: tDTS = 2 * tCK_INT: ClockDevidedBy2
2: tDTS = 4 * tCK_INT: ClockDevidedBy4
3: ู
ุญููุธุฉ: ู
ุญููุธุฉ
ููุง ุ ุนูู ุณุจูู ุงูู
ุซุงู ุ CEN ูู ุญูู 1 ุจุช ู
ุน ุฅุฒุงุญุฉ 0 ูุณุจุฉ ุฅูู ุจุฏุงูุฉ ุงูุชุณุฌูู. ู
Enable (1) ู
Disable (0) ูู
ุง ููู
ุชูู
ุง ุงูู
ู
ููุฉ.
ูู ูุฑูุฒ ุนูู ู
ุง ูุชุญู
ูู ูู ุญูู ูู ูุฐุง ุงูุณุฌู ุจุดูู ุฎุงุต ุ ู
ู ุงูู
ูู
ุจุงููุณุจุฉ ููุง ุฃู ูููู ููู ุญูู ูุญูู ููู
ุฉ ุงุณู
ูุญู
ู ู
ุนูู ุฏูุงูููุง ููู
ูู ู
ู ุฎูุงูู ููู
ู
ุง ูููู
ุจู ู
ู ุญูุซ ุงูู
ุจุฏุฃ.
ูุฌุจ ุฃู ูููู ูุฏููุง ุญู ุงููุตูู ุฅูู ูู ู
ู ุงูุณุฌู ูุงูู
ูุฏุงู ูููู
ุชู. ูุฐูู ุ ูู ุดูู ุชูุฑูุจู ููุบุงูุฉ ุ ูู
ูู ุชู
ุซูู ุชุฌุฑูุฏ ุงูุณุฌู ุจุงููุฆุงุช ุงูุชุงููุฉ:

ุจุงูุฅุถุงูุฉ ุฅูู ุงููุตูู ุงูุฏุฑุงุณูุฉ ุ ู
ู ุงูู
ูู
ุฃูุถูุง ุฃู ูููู ููุณุฌูุงุช ูุงูุญููู ุงููุฑุฏูุฉ ุฎุตุงุฆุต ู
ุนููุฉ ุฃู ุฃู ุงูุณุฌู ูู ุนููุงู ุฃู ุญุฌู
ุฃู ูุถุน ูุตูู (ูููุฑุงุกุฉ ููุท ุฃู ูููุชุงุจุฉ ููุท ุฃู ููุงูู
ุง).
ูุญุชูู ุงูุญูู ุนูู ุงูุญุฌู
ูุงูุฅุฒุงุญุฉ ููุถุน ุงููุตูู ุฃูุถูุง. ุจุงูุฅุถุงูุฉ ุฅูู ุฐูู ุ ูุฌุจ ุฃู ูุญุชูู ุงูุญูู ุนูู ุฑุงุจุท ุฅูู ุงูุณุฌู ุงูุฐู ููุชู
ู ุฅููู.
ูุฌุจ ุฃู ุชุญุชูู ููู
ุฉ ุงูุญูู ุนูู ุงุฑุชุจุงุท ุฅูู ุงูุญูู ูุณู
ุฉ ุฅุถุงููุฉ - ุงูููู
ุฉ.
ูุฐูู ุ ูู ุฅุตุฏุงุฑ ุฃูุซุฑ ุชูุตููุงู ุ ุณูุจุฏู ุงูุชุฌุฑูุฏ ูุฏููุง ูู
ุง ููู:

ุจุงูุฅุถุงูุฉ ุฅูู ุงูุณู
ุงุช ุ ูุฌุจ ุฃู ูููู ูุฏููุง ุงูุชุฌุฑูุฏ ุฃุณุงููุจ ุงูุชุนุฏูู ูุงููุตูู. ููุจุณุงุทุฉ ุ ูุญู ููุชุตุฑ ุนูู ุทุฑู ุงูุชุซุจูุช / ุงููุชุงุจุฉ ูุงููุฑุงุกุฉ.

ุนูุฏู
ุง ูุฑุฑูุง ุชุฌุฑูุฏ ุงูุญุงูุฉ ุ ูุญุชุงุฌ ุฅูู ุงูุชุญูู ู
ู ุชูุงูู ูุฐุง ุงูุชุฌุฑูุฏ ู
ุน ู
ุง ูู ู
ูุตูู ูู ู
ูู SVD.
ุนุฑุถ ูุตู ุงููุธุงู
(SVD) ู
ูู
ุชูุณูู ูุตู ุงูุนุฑุถ ุงูุชูุฏูู
ู ููุธุงู
CMSIS (CMSIS-SVD) ูู ูุตู ุฑุณู
ู ูุณุฌูุงุช ู
ุชุญูู
ูุนุชู
ุฏ ุนูู ู
ุนุงูุฌ ARM Cortex-M. ุงูู
ุนููู
ุงุช ุงููุงุฑุฏุฉ ูู ุฃูุตุงู ุชู
ุซูู ุงููุธุงู
ุ ูุชูุงูู ุนู
ููุง ู
ุน ุงูุจูุงูุงุช ุงูู
ูุฌูุฏุฉ ูู ุงูุฃุฏูุฉ ุงูู
ุฑุฌุนูุฉ ููุฃุฌูุฒุฉ. ูู
ูู ุฃู ูุญุชูู ูุตู ุงูุณุฌูุงุช ูู ู
ุซู ูุฐุง ุงูู
ูู ุนูู ู
ุนููู
ุงุช ุฑููุนุฉ ุงูู
ุณุชูู ูุงูุบุฑุถ ู
ู ุฌุฒุก ูุงุญุฏ ููุท ู
ู ุงูุญูู ูู ุงูุณุฌู.
ู
ู ุงููุงุญูุฉ ุงูุชุฎุทูุทูุฉ ุ ูู
ูู ูุตู ู
ุณุชููุงุช ุชูุงุตูู ุงูู
ุนููู
ุงุช ูู ู
ุซู ูุฐุง ุงูู
ูู ู
ู ุฎูุงู ุงูู
ุฎุทุท ุงูุชุงูู ุ ุงูุฐู ุชู
ุงุชุฎุงุฐู ุนูู ู
ููุน Keil :

ูุชู
ุชูููุฑ ู
ููุงุช SVD ุงููุตู ู
ู ูุจู ุงูุดุฑูุงุช ุงูู
ุตูุนุฉ ููุชู
ุงุณุชุฎุฏุงู
ูุง ุฃุซูุงุก ุชุตุญูุญ ุงูุฃุฎุทุงุก ูุนุฑุถ ู
ุนููู
ุงุช ุญูู ู
ุชุญูู
ูุณุฌูุงุช. ุนูู ุณุจูู ุงูู
ุซุงู ุ ูุณุชุฎุฏู
ูู
IAR ูุนุฑุถ ุงูู
ุนููู
ุงุช ูู ููุญุฉ View-> Registers. ุงูู
ููุงุช ููุณูุง ู
ูุฌูุฏุฉ ูู ุงูู
ุฌูุฏ Program Files (x86) \ IAR Systems \ Embedded Workbench 8.3 \ arm \ config \ debugger.
ูุณุชุฎุฏู
Clion ู
ู JetBrains ุฃูุถูุง ู
ููุงุช svd ูุนุฑุถ ู
ุนููู
ุงุช ุงูุชุณุฌูู ุฃุซูุงุก ุชุตุญูุญ ุงูุฃุฎุทุงุก.
ูู
ููู ุฏุงุฆู
ูุง ุชูุฒูู ุงูุฃูุตุงู ู
ู ู
ูุงูุน ุงูุดุฑูุฉ ุงูู
ุตูุนุฉ.
ููุง ูู
ููู ุฃู ุชุฃุฎุฐ ู
ูู SVD ููุชุญูู
ุงูุฏููู STM32F411ุจุดูู ุนุงู
ุ ุชูุณูู SVD ูู ุงูู
ุนูุงุฑ ุงูุฐู ุชุฏุนู
ู ุงูุดุฑูุงุช ุงูู
ุตูุนุฉ. ุฏุนููุง ูุฑู ู
ุง ูู ู
ุณุชููุงุช ุงููุตู ูู SVD.
ูู ุงูู
ุฌู
ูุน ุ ูุชู
ุชู
ููุฒ 5 ู
ุณุชููุงุช ุ ูู
ุณุชูู ุงูุฌูุงุฒ ุ ูู
ุณุชูู ู
ุชุญูู
ุ ูู
ุณุชูู ุงูุชุณุฌูู ุ ูู
ุณุชูู ุงูุญูู ุ ูู
ุณุชูู ุงูููู
ุงูู
ุฐููุฑุฉ.
- ู
ุณุชูู ุงูุฌูุงุฒ : ูุตู ุงูู
ุณุชูู ุงูุนููู ูุนุฑุถ ุงููุธุงู
ูู ุงูุฌูุงุฒ. ูู ูุฐุง ุงูู
ุณุชูู ุ ูุชู
ุชูุถูุญ ุงูุฎุตุงุฆุต ุงูู
ุชุนููุฉ ุจุงูุฌูุงุฒ ููู. ุนูู ุณุจูู ุงูู
ุซุงู ุ ุงุณู
ุงูุฌูุงุฒ ุฃู ุงููุตู ุฃู ุงูุฅุตุฏุงุฑ. ูุญุฏุฉ ุงูุญุฏ ุงูุฃุฏูู ุนูููุฉ ุ ููุฐูู ุนู
ู ุจุช ูุงูู ุงูุจูุงูุงุช. ูู
ูู ุชุนููู ุงูููู
ุงูุงูุชุฑุงุถูุฉ ูุณู
ุงุช ุงูุณุฌู ุ ู
ุซู ุญุฌู
ุงูุชุณุฌูู ุ ูููู
ุฉ ุฅุนุงุฏุฉ ุงูุชุนููู ุ ูุฃุฐููุงุช ุงููุตูู ุ ููุฌูุงุฒ ุจุฃูู
ูู ูู ูุฐุง ุงูู
ุณุชูู ุ ูุชููู ู
ูุฑูุซุฉ ุถู
ููุงู ุจู
ุณุชููุงุช ู
ูุฎูุถุฉ ู
ู ุงููุตู.
- ู
ุณุชูู ู
ุชุญูู
: ูุตู ูุณู
ูุญุฏุฉ ุงูู
ุนุงูุฌุฉ ุงูู
ุฑูุฒูุฉ ุฌููุฑ ู
ุชุญูู
ูู
ูุฒุงุชู. ูุฐุง ุงููุณู
ู
ุทููุจ ุฅุฐุง ุชู
ุงุณุชุฎุฏุงู
ู
ูู SVD ูุฅูุดุงุก ู
ูู ุฑุฃุณ ุงูุฌูุงุฒ.
- ุงูุทุจูุฉ ุงูู
ุญูุทูุฉ : ุงูุฌูุงุฒ ุงูู
ุญูุทู ุนุจุงุฑุฉ ุนู ู
ุฌู
ูุนุฉ ู
ุณู
ุงุฉ ู
ู ุงูุณุฌูุงุช. ูุชู
ุชุนููู ุงูุฌูุงุฒ ุงูู
ุญูุทู ุฅูู ุนููุงู ุฃุณุงุณู ู
ุญุฏุฏ ูู ู
ุณุงุญุฉ ุนููุงู ุงูุฌูุงุฒ.
- ู
ุณุชูู ุงูุชุณุฌูู : ุงูุณุฌู ูู ู
ูุฑุฏ ูุงุจู ููุจุฑู
ุฌุฉ ู
ุณู
ู ููุชู
ู ุฅูู ุฌูุงุฒ ุทุฑูู. ูุชู
ุชุนููู ุงูุณุฌูุงุช ุฅูู ุนููุงู ู
ุญุฏุฏ ูู ู
ุณุงุญุฉ ุนููุงู ุงูุฌูุงุฒ. ุงูุนููุงู ู
ุฑุชุจุท ุจุงูุนููุงู ุงูู
ุญูุทู ุงูุฃุณุงุณู. ุฃูุถุง ุ ููุณุฌู ุ ูุดุงุฑ ุฅูู ูุถุน ุงููุตูู (ุงููุฑุงุกุฉ / ุงููุชุงุจุฉ).
- ู
ุณุชูู ุงูุญูู : ูู
ุง ุฐูุฑ ุฃุนูุงู ุ ูู
ูู ุชูุณูู
ุงูุณุฌูุงุช ุฅูู ุฃุฌุฒุงุก ู
ู ูุธุงุฆู ู
ุฎุชููุฉ - ุงูุญููู. ูุญุชูู ูุฐุง ุงูู
ุณุชูู ุนูู ุฃุณู
ุงุก ุงูุญููู ุงููุฑูุฏุฉ ูู ููุณ ุงูุณุฌู ุ ูุญุฌู
ูุง ุ ูุงูุฅุฒุงุญุงุช ุงูู
ุชุนููุฉ ุจุจุฏุงูุฉ ุงูุณุฌู ุ ููุฐูู ูุถุน ุงููุตูู.
- ู
ุณุชูู ููู
ุงูุญููู ุงูุชู ุชู
ุชุนุฏุงุฏูุง : ูู ุงููุงูุน ุ ูุชู
ุชุณู
ูุฉ ูุฐู ุงูููู
ุจููู
ุงูุญูู ุงูุชู ูู
ูู ุงุณุชุฎุฏุงู
ูุง ููุฑุงุญุฉ ูู C ู C ++ ู D ูู
ุง ุฅูู ุฐูู.
ูู ุงููุงูุน ุ ู
ููุงุช SVD ูู ู
ููุงุช xml ุนุงุฏูุฉ ู
ุน ูุตู ูุงู
ู ูููุธุงู
. ููุงู ู
ุญููุงุช ู
ููุงุช svd ุฅูู ุฑู
ุฒ C ุ ุนูู ุณุจูู ุงูู
ุซุงู
ููุง ุ ูุงูุชู ุชููุฏ ุฑุคูุณ ูููุงูู ู
ูุงุฆู
ุฉ ูู C ููู ู
ุญูุท ูุชุณุฌูู.
ููุฌุฏ ุฃูุถูุง ู
ุญูู
cmsis-svd ูู
ููุงุช SVD ู
ูุชูุจ ุจูุบุฉ Phyton ุ ููู ูููู
ุจุดูุก ู
ุง ู
ุซู ุฅูุบุงุก ุชุณูุณู ุงูุจูุงูุงุช ู
ู ู
ูู ุฅูู ูุงุฆูุงุช ูุฆุฉ ูู Phython ุ ูุงูุชู ูุชู
ุงุณุชุฎุฏุงู
ูุง ุจุนุฏ ุฐูู ูู ุจุฑูุงู
ุฌ ุฅูุดุงุก ุงูุดูุฑุฉ.
ูู
ูู ุงูุงุทูุงุน ุนูู ู
ุซุงู ููุตู ุณุฌู ู
ุชุญูู
STM32F411 ุชุญุช ุงูู
ูุณุฏ:
ู
ุซุงู ุณุฌู ู
ุคูุช CR1 TIM1 <peripheral> <name>TIM1</name> <description>Advanced-timers</description> <groupName>TIM</groupName> <baseAddress>0x40010000</baseAddress> <addressBlock> <offset>0x0</offset> <size>0x400</size> <usage>registers</usage> </addressBlock> <registers> <register> <name>CR1</name> <displayName>CR1</displayName> <description>control register 1</description> <addressOffset>0x0</addressOffset> <size>0x20</size> <access>read-write</access> <resetValue>0x0000</resetValue> <fields> <field> <name>CKD</name> <description>Clock division</description> <bitOffset>8</bitOffset> <bitWidth>2</bitWidth> </field> <field> <name>ARPE</name> <description>Auto-reload preload enable</description> <bitOffset>7</bitOffset> <bitWidth>1</bitWidth> </field> <field> <name>CMS</name> <description>Center-aligned mode selection</description> <bitOffset>5</bitOffset> <bitWidth>2</bitWidth> </field> <field> <name>DIR</name> <description>Direction</description> <bitOffset>4</bitOffset> <bitWidth>1</bitWidth> </field> <field> <name>OPM</name> <description>One-pulse mode</description> <bitOffset>3</bitOffset> <bitWidth>1</bitWidth> </field> <field> <name>URS</name> <description>Update request source</description> <bitOffset>2</bitOffset> <bitWidth>1</bitWidth> </field> <field> <name>UDIS</name> <description>Update disable</description> <bitOffset>1</bitOffset> <bitWidth>1</bitWidth> </field> <field> <name>CEN</name> <description>Counter enable</description> <bitOffset>0</bitOffset> <bitWidth>1</bitWidth> </field> </fields> </register> <register>
ูู
ุง ุชุฑูู ุ ููุงู ูู ุงูู
ุนููู
ุงุช ุงููุงุฒู
ุฉ ูุชุฌุฑูุฏูุง ุ ุจุงุณุชุซูุงุก ูุตู ููู
ุงูุจุชุงุช ุงูู
ุญุฏุฏุฉ ููุญููู.
ูุง ูุฑุบุจ ุฌู
ูุน ุงูู
ุตููุนูู ูู ูุถุงุก ุจุนุถ ุงูููุช ูู ูุตู ูุงู
ู ููุธุงู
ูู
ุ ูุฐุง ูู
ุง ุชุฑู ุ ูู
ุชุฑุบุจ ST ูู ูุตู ููู
ุงูุญููู ูููู ูุฐุง ุงูุนุจุก ุฅูู ู
ุจุฑู
ุฌู ุงูุนู
ูุงุก. ููู TI ุชูุชู
ุจุนู
ูุงุฆูุง ูุชุตู ุงููุธุงู
ุจุงููุงู
ู ุ ุจู
ุง ูู ุฐูู ุฃูุตุงู ููู
ุงูุญููู.
ู
ุง ูุฑุฏ ุฃุนูุงู ููุถุญ ุฃู ุชูุณูู ูุตู SVD ู
ุชูุงูู ุฌุฏูุง ู
ุน ุชุฌุฑูุฏ ูุถูุชูุง. ูุญุชูู ุงูู
ูู ุนูู ุฌู
ูุน ุงูู
ุนููู
ุงุช ุงููุงุฒู
ุฉ ู
ู ุฃุฌู ูุตู ุงูุณุฌู ุจุงููุงู
ู.
ุชุทุจูู
ุชุณุฌูู
ุงูุขู ูุจุนุฏ ุฃู ูู
ูุง ุจุงูุชุฌุฑูุฏ ู
ู ุงูุณุฌู ููุฏููุง ูุตู ููุณุฌูุงุช ูู ุดูู ู
ูู svd ู
ู ุงูุดุฑูุงุช ุงูู
ุตูุนุฉ ุงูุชู ุชุชูุงุณุจ ุจุดูู ู
ุซุงูู ู
ุน ูุฐุง ุงูุชุฌุฑูุฏ ุ ูู
ูููุง ุงูุงูุชูุงู ู
ุจุงุดุฑุฉ ุฅูู ุงูุชูููุฐ.
ูุฌุจ ุฃู ูููู ุชูููุฐูุง ูุนุงููุง ู
ุซู ุฑู
ุฒ C ูุณูู ุงูุงุณุชุฎุฏุงู
. ุฃุฑุบุจ ูู ุฃู ูููู ุงููุตูู ุฅูู ุงูุณุฌูุงุช ูุงุถุญูุง ูุฏุฑ ุงูุฅู
ูุงู ุ ุนูู ุณุจูู ุงูู
ุซุงู ุ ู
ุซู ูุฐุง:
if (TIM1::CR1::CKD::DividedBy2::IsSet()) { TIM1::ARR::Set(10_ms) ; TIM1::CR1::CEN::Enable::Set() ; }
ุชุฐูุฑ ุฃูู ู
ู ุฃุฌู ุงููุตูู ุฅูู ุนููุงู ุงูุชุณุฌูู ุงูุตุญูุญ ุ ุชุญุชุงุฌ ุฅูู ุงุณุชุฎุฏุงู
reinterpret_cast:
*reinterpret_cast<volatile uint32_t *>(0x40010000) = (1U << 5U) ;
ุชู
ุจุงููุนู ูุตู ูุฆุฉ ุงูุณุฌู ุฃุนูุงู ุ ููุฌุจ ุฃู ูููู ููุง ุนููุงู ูุญุฌู
ููุถุน ูุตูู ุ ุจุงูุฅุถุงูุฉ ุฅูู ุทุฑููุชูู
Get()
ู
Set()
:
ูููู
ุจุชู
ุฑูุฑ ุงูุนููุงู ูุทูู ุงูุชุณุฌูู ููุถุน ุงููุตูู ุฅูู ู
ุนูู
ุงุช ุงููุงูุจ (ูุฐู ุฃูุถูุง ูุฆุฉ). ุจุงุณุชุฎุฏุงู
ุขููุฉ
SFINAE ุ ููู
enable_if
enable_if ุ ุณูููู
ุจู "ุงูุชุฎูุต" ู
ู ูุธุงุฆู ุงููุตูู
Set()
ุฃู
Get()
ููุณุฌูุงุช ุงูุชู ูุง ููุจุบู ุฃู ุชุฏุนู
ูุง. ุนูู ุณุจูู ุงูู
ุซุงู ุ ุฅุฐุง ูุงู ุงูุณุฌู ูููุฑุงุกุฉ ููุท ุ ูุณูููู
ReadMode
ููุน
ReadMode
ุฅูู ู
ุนูู
ุฉ ุงููุงูุจ ุ ูุณูู ูููู
enable_if
ุจุงูุชุญูู ู
ู
ุง ุฅุฐุง ูุงู ุงููุตูู ูู ุฎูููุฉ
ReadMode
ูุฅุฐุง ูู
ููู ุงูุฃู
ุฑ ูุฐูู ุ ูุณูุคุฏู ุฐูู ุฅูู ุฅูุดุงุก ุฎุทุฃ ู
ุญููู
ุนููู (ูู ูุชู
ุนุฑุถ ุงูููุน T) ุ ููู ูุชุถู
ู ุงูู
ุชุฑุฌู
ุทุฑููุฉ
Set()
ูู
ุซู ูุฐุง ุงูุณุฌู. ุงูุดูุก ููุณู ููุทุจู ุนูู ุณุฌู ู
ุฎุตุต ูููุชุงุจุฉ ููุท.
ููุชุญูู
ูู ุงููุตูู ุ ุณูู ูุณุชุฎุฏู
ุงููุตูู ุงูุฏุฑุงุณูุฉ:
ุชุฃุชู ุงูุณุฌูุงุช ุจุฃุญุฌุงู
ู
ุฎุชููุฉ: 8 ุ 16 ุ 32 ุ 64 ุจุช. ููู ู
ููุง ุ ูุถุน ููุนูุง:
ููุน ุงูุณุฌูุงุช ุญุณุจ ุงูุญุฌู
template <uint32_t size> struct RegisterType {} ; template<> struct RegisterType<8> { using Type = uint8_t ; } ; template<> struct RegisterType<16> { using Type = uint16_t ; } ; template<> struct RegisterType<32> { using Type = uint32_t ; } ; template<> struct RegisterType<64> { using Type = uint64_t ; } ;
ุจุนุฏ ุฐูู ุ ุจุงููุณุจุฉ ุฅูู TIM1 ุงูู
ุคูุช ุ ูู
ููู ุชุญุฏูุฏ ุณุฌู CR1 ุ ูุนูู ุณุจูู ุงูู
ุซุงู ุ ุณุฌู EGR ุจูุฐู ุงูุทุฑููุฉ:
struct TIM1 { struct CR1 : public RegisterBase<0x40010000, 32, ReadWriteMode> { } struct EGR : public RegisterBase<0x40010014, 32, WriteMode> { } } int main() { TIM1::CR1::Set(10) ; auto reg = TIM1::CR1::Get() ;
ูุธุฑูุง ูุฃู ุงูู
ุญูู ุงูุจุฑู
ุฌู ูุนุฑุถ ุฃุณููุจ
Get()
ููุท
ReadMode
ูุชู
ูููุง ุชูุฑูุซ ูุถุน ุงููุตูู ู
ู
ReadMode
ุ ูุทุฑู
Set()
ุงูุฎุงุตุฉ
WriteMode
ูุชู
ูููุง ุชูุฑูุซ ูุถุน ุงููุตูู ู
ู
WriteMode
ุ ูู ุญุงูุฉ ุงูุงุณุชุฎุฏุงู
ุบูุฑ ุงูุตุญูุญ ูุฃุณุงููุจ ุงููุตูู ุ ุณุชุชููู ุฎุทุฃ ูู ู
ุฑุญูุฉ
WriteMode
. ูุฅุฐุง ููุช ุชุณุชุฎุฏู
ุฃุฏูุงุช ุงูุชุทููุฑ ุงูุญุฏูุซุฉ ุ ู
ุซู Clion ุ ุญุชู ูู ู
ุฑุญูุฉ ุงูุชุฑู
ูุฒ ุ ุณุชุฑู ุชุญุฐูุฑูุง ู
ู ู
ุญูู ุงูุดูุฑุฉ:

ุญุณููุง ุ ุฃุตุจุญ ุงููุตูู ุฅูู ุงูุณุฌูุงุช ุงูุขู ุฃูุซุฑ ุฃู
ุงููุง ุ ููุง ูุณู
ุญ ูู ุฑู
ุฒูุง ุจุงูููุงู
ุจุฃุดูุงุก ุบูุฑ ู
ูุจููุฉ ููุฐุง ุงูุณุฌู ุ ููููุง ูุฑูุฏ ุงูู
ุถู ูุฏู
ูุง ูุงูุฅุดุงุฑุฉ ุฅูู ุงูุณุฌู ุจุฃูู
ูู ุ ูููู ุฅูู ุญูููู.
ุงูุญููู
ูุญุชูู ุงูุญูู ุจุฏูุงู ู
ู ุงูุนููุงู ุนูู ููู
ุฉ ุชุญููู ูุณุจุฉ ุฅูู ุจุฏุงูุฉ ุงูุณุฌู. ุจุงูุฅุถุงูุฉ ุฅูู ุฐูู ุ ู
ู ุฃุฌู ู
ุนุฑูุฉ ุงูุนููุงู ุฃู ุงูููุน ุงูุฐู ูุฌุจ ุชูุฏูู
ููู
ุฉ ุงูุญูู ุฅููู ุ ูุฌุจ ุฃู ูููู ูุฏูู ุฑุงุจุท ุฅูู ุงูุณุฌู:
ุจุนุฏ ุฐูู ุ ู
ู ุงูู
ู
ูู ุจุงููุนู ุงูููุงู
ุจุงูุฃู
ูุฑ ุงูุชุงููุฉ:
struct TIM1 { struct CR1 : public RegisterBase<0x40010000, 32, ReadWriteMode> { using CKD = RegisterField<TIM1::CR1, 8, 2, ReadWriteMode> ; using ARPE = RegisterField<TIM1::CR1, 7, 1, ReadWriteMode> ; using CMS = RegisterField<TIM1::CR1, 5, 2, ReadWriteMode> ; using DIR = RegisterField<TIM1::CR1, 4, 1, ReadWriteMode> ; using OPM = RegisterField<TIM1::CR1, 3, 1, ReadWriteMode> ; using URS = RegisterField<TIM1::CR1, 2, 1, ReadWriteMode> ; using UDIS = RegisterField<TIM1::CR1, 1, 1, ReadWriteMode> ; using CEN = RegisterField<TIM1::CR1, 0, 1, ReadWriteMode> ; } } int main() {
ุนูู ุงูุฑุบู
ู
ู ุฃู ูู ุดูุก ูุจุฏู ุฌูุฏูุง ุจุดูู ุนุงู
ุ ุฅูุง ุฃูู ูุง ูุฒุงู ุบูุฑ ูุงุถุญ ุชู
ุงู
ูุง ู
ุงุฐุง
TIM1::CR1::CKD::Set(2)
ุ ู
ุงุฐุง ูุนูู
TIM1::CR1::CKD::Set(2)
ุงููุฐูู ุชู
ุชู
ุฑูุฑูู
ุง ุฅูู ูุธููุฉ
Set()
ุ ูู
ุงุฐุง ูุนูู ุงูุฑูู
ุงูู
ุฑุชุฌุน ุจูุงุณุทุฉ ุทุฑููุฉ
TIM1::CR1::CEN::Get()
ุ
ุงูุงูุชูุงู ุจุณูุงุณุฉ ุฅูู ููู
ุงูุญูู.
ููู
ุฉ ุงูุญูู
ูุนุฏ ุชุฌุฑูุฏ ููู
ุฉ ุงูุญูู ุญูููุง ุฃุณุงุณููุง ุฃูุถูุง ุ ููููู ูุงุฏุฑ ุนูู ูุจูู ุญุงูุฉ ูุงุญุฏุฉ ููุท. ุชุชู
ุฅุถุงูุฉ ุงูุณู
ุงุช ุฅูู ุชุฌุฑูุฏ ุงูุญูู - ุงูููู
ุฉ ุงููุนููุฉ ูุฑุงุจุท ุฅูู ุงูุญูู. ุทุฑููุฉ
Set()
ููู
ุฉ ุงูุญูู ู
ุทุงุจูุฉ ูุทุฑููุฉ
Set()
ุงูุญูู ุ ุจุงุณุชุซูุงุก ุฃู ุงูููู
ุฉ ููุณูุง ูุง ุชุญุชุงุฌ ุฅูู ุฃู ุชูุชูู ุฅูู ูุฐู ุงูุทุฑููุฉ ุ ููู ู
ุนุฑููุฉ ู
ูุฏู
ูุง ุ ุชุญุชุงุฌ ููุท ุฅูู ุถุจุท. ููู ุฃุณููุจ
Get()
ูุง ู
ุนูู ูู ุ ูุจุฏูุงู ู
ู ุฐูู ุ ู
ู ุงูุฃูุถู ุงูุชุญูู ู
ู
ุง ุฅุฐุง ูุงูุช ูุฐู ุงูููู
ุฉ ู
ุญุฏุฏุฉ ุฃู
ูุง ุ
IsSet()
ูุฐู ุงูุทุฑููุฉ ุจุฃุณููุจ
IsSet()
.
ูู
ูู ุงูุขู ูุตู ุญูู ุงูุณุฌู ุจู
ุฌู
ูุนุฉ ู
ู ููู
ู:
ุชุณุฌู ููู
CR1 ุญููู ุงูู
ุคูุช TIM1 template <typename Reg, size_t offset, size_t size, typename AccessMode> struct TIM_CR_CKD_Values: public RegisterField<Reg, offset, size, AccessMode> { using DividedBy1 = FieldValue<TIM_CR_CKD_Values, 0U> ; using DividedBy2 = FieldValue<TIM_CR_CKD_Values, 1U> ; using DividedBy4 = FieldValue<TIM_CR_CKD_Values, 2U> ; using Reserved = FieldValue<TIM_CR_CKD_Values, 3U> ; } ; template <typename Reg, size_t offset, size_t size, typename AccessMode> struct TIM_CR_ARPE_Values: public RegisterField<Reg, offset, size, AccessMode> { using ARRNotBuffered = FieldValue<TIM_CR_ARPE_Values, 0U> ; using ARRBuffered = FieldValue<TIM_CR_ARPE_Values, 1U> ; } ; template <typename Reg, size_t offset, size_t size, typename AccessMode> struct TIM_CR_CMS_Values: public RegisterField<Reg, offset, size, AccessMode> { using CenterAlignedMode0 = FieldValue<TIM_CR_CMS_Values, 0U> ; using CenterAlignedMode1 = FieldValue<TIM_CR_CMS_Values, 1U> ; using CenterAlignedMode2 = FieldValue<TIM_CR_CMS_Values, 2U> ; using CenterAlignedMode3 = FieldValue<TIM_CR_CMS_Values, 3U> ; } ; template <typename Reg, size_t offset, size_t size, typename AccessMode> struct TIM_CR_DIR_Values: public RegisterField<Reg, offset, size, AccessMode> { using Upcounter = FieldValue<TIM_CR_DIR_Values, 0U> ; using Downcounter = FieldValue<TIM_CR_DIR_Values, 1U> ; } ; template <typename Reg, size_t offset, size_t size, typename AccessMode> struct TIM_CR_OPM_Values: public RegisterField<Reg, offset, size, AccessMode> { using ContinueAfterUEV = FieldValue<TIM_CR_OPM_Values, 0U> ; using StopAfterUEV = FieldValue<TIM_CR_OPM_Values, 1U> ; } ; template <typename Reg, size_t offset, size_t size, typename AccessMode> struct TIM_CR_URS_Values: public RegisterField<Reg, offset, size, AccessMode> { using Any = FieldValue<TIM_CR_URS_Values, 0U> ; using Overflow = FieldValue<TIM_CR_URS_Values, 1U> ; } ; template <typename Reg, size_t offset, size_t size, typename AccessMode> struct TIM_CR_UDIS_Values: public RegisterField<Reg, offset, size, AccessMode> { using Enable = FieldValue<TIM_CR_UDIS_Values, 0U> ; using Disable = FieldValue<TIM_CR_UDIS_Values, 1U> ; } ; template <typename Reg, size_t offset, size_t size, typename AccessMode> struct TIM_CR_CEN_Values: public RegisterField<Reg, offset, size, AccessMode> { using Disable = FieldValue<TIM_CR_CEN_Values, 0U> ; using Enable = FieldValue<TIM_CR_CEN_Values, 1U> ; } ;
ุจุนุฏ ุฐูู ุ ุณูุชู
ุจุงููุนู ูุตู ุณุฌู CR1 ููุณู ุนูู ุงููุญู ุงูุชุงูู:
struct TIM1 { struct CR1 : public RegisterBase<0x40010000, 32, ReadWriteMode> { using CKD = TIM_CR1_CKD_Values<TIM1::CR1, 8, 2, ReadWriteMode> ; using ARPE = TIM_CR1_ARPE_Values<TIM1::CR1, 7, 1, ReadWriteMode> ; using CMS = TIM_CR1_CMS_Values<TIM1::CR1, 5, 2, ReadWriteMode> ; using DIR = TIM_CR1_DIR_Values<TIM1::CR1, 4, 1, ReadWriteMode> ; using OPM = TIM_CR1_OPM_Values<TIM1::CR1, 3, 1, ReadWriteMode> ; using URS = TIM_CR1_URS_Values<TIM1::CR1, 2, 1, ReadWriteMode> ; using UDIS = TIM_CR1_UDIS_Values<TIM1::CR1, 1, 1, ReadWriteMode> ; using CEN = TIM_CR1_CEN_Values<TIM1::CR1, 0, 1, ReadWriteMode> ; } ; }
ุงูุขู ูู
ููู ุชุนููู ููุฑุงุกุฉ ููู
ุฉ ุญูู ุงูุชุณุฌูู ู
ุจุงุดุฑุฉ: ุนูู ุณุจูู ุงูู
ุซุงู ุ ุฅุฐุง ููุช ุชุฑุบุจ ูู ุชู
ููู ุงูู
ุคูุช ุนูู ุงูุญุณุงุจ ุ ู
ุง ุนููู ุณูู ุงูุงุชุตุงู ุจุงูุทุฑููุฉ
Set()
ุนูู
Enable
ููู
ุฉ ุงูุญูู CEN ุงูุฎุงุต ุจุงูุชุณุฌูู CR1 ู
ู ุงูู
ุคูุช TIM1:
TIM1::CR1::CEN::Enable::Set() ;
. ูู ุงูููุฏ ุ ุณูุจุฏู ูู
ุง ููู:
int main() { if (TIM1::CR1::CKD::DividedBy2::IsSet()) { TIM1::ARR::Set(100U) ; TIM1::CR1::CEN::Enable::Set() ; } }
ููู
ูุงุฑูุฉ ุ ููุณ ุงูุดูุก ุจุงุณุชุฎุฏุงู
ุฑุฃุณ C: int main() { if((TIM1->CR1 & TIM_CR1_CKD_Msk) == TIM_CR1_CKD_0) { TIM1->ARR = 100U ; regValue = TIM1->CR1 ; regValue &=~(TIM_CR1_CEN_Msk) ; regValue |= TIM_CR1_CEN ; TIM1->CR1 = regValue ; } }
ูุฐูู ุ ุชู
ุฅุฌุฑุงุก ุงูุชุญุณููุงุช ุงูุฑุฆูุณูุฉ ุ ูู
ูููุง ุงููุตูู ุฅูู ุงูุณุฌู ุจุทุฑููุฉ ุณููุฉ ูู
ูููู
ุฉ ูู
ุฌุงูุงุชู ูููู
ู. , , , , .
, . , :
int main() { uint32_t regValue = TIM1->CR1 ; regValue &=~(TIM_CR1_CKD_Msk | TIM_CR1_DIR) ; regValue |= (TIM_CR1_CEN | TIM_CR1_CKD_0 | TIM_CR1_CKD_0) ; TIM1->CR1 = regValue ; }
Set(...)
, , . ุฃู :
int main() {
, , , , .
. :
, :
- , .
- .
constexpr , :
Set()
IsSet()
:
, :
int main() {
, - , , , ,
FieldValueBaseType
. ,
FieldValueBaseType
:
template<uint32_t address, size_t size, typename AccessMode, typename FieldValueBaseType, typename ...Args> class Register { private:
, SFINAE , , , , , .
CR1 TIM1, :
struct TIM1 { struct TIM1CR1Base {} ; struct CR1 : public RegisterBase<0x40010000, 32, ReadWriteMode> { using CKD = TIM_CR_CKD_Values<TIM1::CR1, 8, 2, ReadWriteMode, TIM1CR1Base> ; using ARPE = TIM_CR_ARPE_Values<TIM1::CR1, 7, 1, ReadWriteMode, TIM1CR1Base> ; using CMS = TIM_CR_CMS_Values<TIM1::CR1, 5, 2, ReadWriteMode, TIM1CR1Base> ; using DIR = TIM_CR_DIR_Values<TIM1::CR1, 4, 1, ReadWriteMode, TIM1CR1Base> ; using OPM = TIM_CR_OPM_Values<TIM1::CR1, 3, 1, ReadWriteMode, TIM1CR1Base> ; using URS = TIM_CR_URS_Values<TIM1::CR1, 2, 1, ReadWriteMode, TIM1CR1Base> ; using UDIS = TIM_CR_UDIS_Values<TIM1::CR1, 1, 1, ReadWriteMode, TIM1CR1Base> ; using CEN = TIM_CR_CEN_Values<TIM1::CR1, 0, 1, ReadWriteMode, TIM1CR1Base> ; } ; }
, , . , , , .
, :
ูุญุงูู ุฃู ุชูุนู ุงูุดูุก ููุณู ู
ุน ุงูููุฌ ุงูุฌุฏูุฏ: int main(void) {
ูู ูู ุญุงูุฉ ู
ู ูุฐู ุงูุญุงูุงุช ุ ุญุตููุง ุนูู ุฎุทุฃ ูู ู
ุฑุญูุฉ ุงูุชุฌู
ูุน ุ ููุฐุง ุจุงูุถุจุท ู
ุง ุญูููุงู.ุญุณููุง ุ ููุฏ ูุฏู
ูุง โโูุตููุงู ุฌู
ููุงู ูุขู
ูุงู ุฅูู ุงูุณุฌู ูู
ุฌุงูุงุชู ุ ููู ู
ุงุฐุง ุนู ุงูุณุฑุนุฉุุณุฑุนุฉ
ููู
ูุงุฑูุฉ ุ ูู
ูู ุฃูุถู ููุฌูุง ุ ุณูุณุชุฎุฏู
ููุฏ C ู C ++ ุงูุฐู ูุบุฐู ุงูุณุงุนุฉ ููู
ููุฐ A ุ ููุถุจุท ุงูู
ูุงูุฐ ุงูุซูุงุซุฉ ุนูู ูุถุน ุงูุฅุฎุฑุงุฌ ุ ููุนูู ู
ูุงูุฐ ุงูุฅุฎุฑุงุฌ ูู ูุฐู ุงูู
ูุงูุฐ ุงูุซูุงุซุฉ 1:ุฑู
ุฒ C: int main() { uint32_t res = RCC->AHB2ENR; res &=~ RCC_AHB1ENR_GPIOAEN_Msk ; res |= RCC_AHB1ENR_GPIOAEN ; RCC->AHB2ENR = res ; res = GPIOA->MODER ; res &=~ (GPIO_MODER_MODER5 | GPIO_MODER_MODER4 | GPIO_MODER_MODER1) ; res |= (GPIO_MODER_MODER5_0 | GPIO_MODER_MODER4_0 | GPIO_MODER_MODER1_0) ; GPIOA->MODER = res ; GPIOA->BSRR = (GPIO_BSRR_BS5 | GPIO_BSRR_BS4 | GPIO_BSRR_BS1) ; return 0 ; }
ุฑู
ุฒ C ++: int main() { RCC::AHB1ENR::GPIOAEN::Enable::Set() ; GPIOA::MODERPack< GPIOA::MODER::MODER5::Output, GPIOA::MODER::MODER4::Output, GPIOA::MODER::MODER1::Output>::Set() ; GPIOA::BSRRPack< GPIOA::BSRR::BS5::Set, GPIOA::BSRR::BS4::Set, GPIOA::BSRR::BS1::Set>::Write() ; return 0 ; }
IAR. : :
:

C++ :

18 , , .
, :

13 .
++ :

: , .
, . , ?
, , . . , . , , . , . SVD , , , .
, , , , enum, . , ,
.
ูุคุฏู
, , . , gpioa rcc, :
#include "gpioaregisters.hpp"
, SVD , , .
, , , SVD , - ST , :
template <typename Reg, size_t offset, size_t size, typename AccessMode, typename BaseType> struct GPIOA_MODER_MODER_Values: public RegisterField<Reg, offset, size, AccessMode> { using Value0 = FieldValue<GPIOA_MODER_MODER_Values, BaseType, 0U> ; using Value1 = FieldValue<GPIOA_MODER_MODER_Values, BaseType, 1U> ; using Value2 = FieldValue<GPIOA_MODER_MODER_Values, BaseType, 2U> ; using Value3 = FieldValue<GPIOA_MODER_MODER_Values, BaseType, 3U> ; } ;
, Value, - :
template <typename Reg, size_t offset, size_t size, typename AccessMode, typename BaseType> struct GPIOA_MODER_MODER_Values: public RegisterField<Reg, offset, size, AccessMode> { using Input = FieldValue<GPIOA_MODER_MODER_Values, BaseType, 0U> ; using Output = FieldValue<GPIOA_MODER_MODER_Values, BaseType, 1U> ; using Alternate = FieldValue<GPIOA_MODER_MODER_Values, BaseType, 2U> ; using Analog = FieldValue<GPIOA_MODER_MODER_Values, BaseType, 3U> ; } ;
.
, ST , 0.
, , enum .
, .
IAR 8.40.1
ยซ Online GDBยปPS:
putyavka RegisterField::Get()
Ryppka assert.
Typesafe Register Access in C++One Approach to Using Hardware Registers in C++SVD Description (*.svd) Format