Страница 1 из 1
STM32 Cube IDE CMSIS
Добавлено: Вс дек 03, 2023 19:05:23
aleksey chilov
Добрый вечер всем!
Парни тут такой вопрос к знатокам STM-щикам.
Хочу настроить делей свой через SysTick и не
могу найти маски в файле под регистр STK_CTRL
и остальные... Может быть не в том файле ищу а?
Подскажите кто знает. То как известно в кубике
с автоподстановкой дела обстоят ну не очень уж...
Прошу сильно не ругайтесь я баран бараном тут.
HAL не признаю хочу работать с CMSIS так как
начинал с AVR и с регистрами как-то привычнее чтоли...
На фотках всё есть...
Спасибо.

Re: STM32 Cube IDE CMSIS
Добавлено: Вс дек 03, 2023 20:15:05
azhel12
Могу не совсем верно оперировать терминами, но
SysTick - это не про STM, а про ARM вообще, маски искать надо в ARM-овских заголовках (
core_cm3 в вашем случае).

Re: STM32 Cube IDE CMSIS
Добавлено: Пн дек 04, 2023 13:43:46
aleksey chilov
Что-то не получается... Не срабатывает прерывание у меня. Настройки вроде правильные а хендлере переменная не инкрементируется. Что-то где-то...
Re: STM32 Cube IDE CMSIS
Добавлено: Пн дек 04, 2023 14:03:37
VladislavS
В CMSIS есть функция uint32_t SysTick_Config(uint32_t ticks). Либо используйте её, либо посмотрите как она внутри устроена.
Re: STM32 Cube IDE CMSIS
Добавлено: Пн дек 04, 2023 14:12:39
aleksey chilov
Добавлено after 38 seconds:
Может что в настройках не то?
Re: STM32 Cube IDE CMSIS
Добавлено: Ср дек 13, 2023 19:14:14
NotoriousCoder)
Ну так смотрите, есть бит SysTick_CTRL_ENABLE_Msk, Вы его зачем то очищаете, ставите SysTick_CTRL_TICKINT_Msk и думаете, почему не работает. Я в своем проекте (правда у меня cm4, но мне кажется, что тут одинаково будет) делаю вот так:
Код: Выделить всё
static bool SysTick_Init(uint32_t ticks){
/* LOAD register has only 24 bits */
if (ticks > 0x00FFFFFF || ticks < 1) return 1;
SysTick->LOAD = ticks;
SysTick->VAL = 0; /* Writing any number would clear VAL register */
SysTick->CTRL |= SysTick_CTRL_CLKSOURCE_Msk
| SysTick_CTRL_TICKINT_Msk
| SysTick_CTRL_ENABLE_Msk;
return 0;
Добавлено after 4 minutes 42 seconds:
С помощью TICKINT Вы включаете прерывания (которые потом в SysTick_Handler обрабатываете), а с помощью ENABLE, каким бы это удивительным не казалось, Вы просто включаете сам таймер