Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

STM32 Cube IDE CMSIS

Вс дек 03, 2023 19:05:23

Добрый вечер всем!
Парни тут такой вопрос к знатокам STM-щикам.
Хочу настроить делей свой через SysTick и не
могу найти маски в файле под регистр STK_CTRL
и остальные... Может быть не в том файле ищу а?
Подскажите кто знает. То как известно в кубике
с автоподстановкой дела обстоят ну не очень уж...
Прошу сильно не ругайтесь я баран бараном тут.
HAL не признаю хочу работать с CMSIS так как
начинал с AVR и с регистрами как-то привычнее чтоли...
На фотках всё есть...
Спасибо.

Изображение Изображение Изображение

Re: STM32 Cube IDE CMSIS

Вс дек 03, 2023 20:15:05

Могу не совсем верно оперировать терминами, но SysTick - это не про STM, а про ARM вообще, маски искать надо в ARM-овских заголовках (core_cm3 в вашем случае).

Изображение

Re: STM32 Cube IDE CMSIS

Пн дек 04, 2023 13:43:46

Что-то не получается... Не срабатывает прерывание у меня. Настройки вроде правильные а хендлере переменная не инкрементируется. Что-то где-то...

Re: STM32 Cube IDE CMSIS

Пн дек 04, 2023 14:03:37

В CMSIS есть функция uint32_t SysTick_Config(uint32_t ticks). Либо используйте её, либо посмотрите как она внутри устроена.

Re: STM32 Cube IDE CMSIS

Пн дек 04, 2023 14:12:39

Изображение

Добавлено after 38 seconds:
Может что в настройках не то?

Re: STM32 Cube IDE CMSIS

Ср дек 13, 2023 19:14:14

Ну так смотрите, есть бит 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, каким бы это удивительным не казалось, Вы просто включаете сам таймер
Ответить