#pragma GCC push_options
#pragma GCC optimize ("O0")
#include "stm32c0xx.h"
void delay_mSeconds(uint32_t mSeconds) {
SysTick->CTRL = 0;
SysTick->LOAD = 48000 - 1;
SysTick->VAL = 0;
SysTick->CTRL = 7; // Enable SysTick, Enable Interrupt, Use processor clock
for (int i = 0;i < mSeconds; i++){
while ((SysTick->CTRL & (1 << 16))==0){}
}
}
unsigned int increment = 0;
void osSystickHandler(void) {
increment++;
if(increment == 200){
GPIOD->ODR ^= (1UL << 2);
increment = 0;
}
}
int main(void) {
// Enable GPIOD clock
RCC->IOPENR |= RCC_IOPENR_GPIOCEN;
// Set GPIOD pin 0 as output
GPIOD->MODER &= ~(3UL << (0 * 2)); // Clear mode
GPIOD->MODER |= (1UL << (0 * 2)); // Set to output
GPIOD->MODER &= ~(3UL << (2 * 2));
GPIOD->MODER |= (1UL << (2 * 2));
while (1) {
GPIOD->ODR ^= (1UL << 0); // Toggle pin 0
delay_mSeconds(2000);
}
}
Loading
st-nucleo-c031c6
st-nucleo-c031c6