#include "stm32c0xx.h"
// Function prototypes
void SystemClock_Config(void);
void UART1_Init(void);
void UART1_Send(char *data);
int main(void) {
SystemClock_Config(); // Configure system clock to 16 MHz
UART1_Init(); // Initialize UART
while (1) {
UART1_Send("0!\n"); // Transmit "0!"
for (int i = 0; i < 5000000; i++); // Extended delay
UART1_Send("1!\n"); // Transmit "1!"
for (int i = 0; i < 5000000; i++); // Extended delay
}
}
void SystemClock_Config(void) {
// Enable the High-Speed Internal (HSI) oscillator (16 MHz)
RCC->CR |= RCC_CR_HSION;
while (!(RCC->CR & RCC_CR_HSIRDY)); // Wait until HSI is ready
// Select HSI as system clock source
RCC->CFGR |= RCC_CFGR_SWS_HSI;
while ((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_HSI); // Wait until HSI is used as system clock
// Optionally set the HSI calibration (if required)
RCC->ICSCR = (RCC->ICSCR & ~RCC_ICSCR_HSITRIM) | (0x10 << RCC_ICSCR_HSITRIM_Pos); // Default trim value
}
void UART1_Init(void) {
// Enable GPIOA and USART1 clocks
RCC->IOPENR |= RCC_IOPENR_GPIOAEN; // Enable GPIOA clock
RCC->APBENR2 |= RCC_APBENR2_USART1EN; // Enable USART1 clock
// Configure PA2 (TX) and PA3 (RX) for USART1
GPIOA->MODER &= ~(GPIO_MODER_MODE2 | GPIO_MODER_MODE3); // Clear mode bits
GPIOA->MODER |= (GPIO_MODER_MODE2_1 | GPIO_MODER_MODE3_1); // Set to alternate function mode
GPIOA->AFR[0] |= (4 << GPIO_AFRL_AFSEL2_Pos) | (4 << GPIO_AFRL_AFSEL3_Pos); // AF4 for USART1
// Configure USART1 for 115200 baud rate (BRR = 0x8A for 16 MHz clock)
USART1->BRR = 0x8A; // Set baud rate to 115200
USART1->CR1 = USART_CR1_TE | USART_CR1_UE; // Enable TX and UART
}
void UART1_Send(char *data) {
while (*data) {
// Wait until TXE (Transmit Data Register Empty) is set
while (!(USART1->ISR & USART_ISR_TXFE));
USART1->TDR = *data++; // Transmit data
}
// Wait until TC (Transmission Complete) is set
while (!(USART1->ISR & USART_ISR_TC));
}
nucleo:PD0
nucleo:PD2
nucleo:VDD
nucleo:PA14
nucleo:PA13
nucleo:PC6
nucleo:GND.1
nucleo:PC13
nucleo:PC14
nucleo:PF0
nucleo:PF1
nucleo:PB11
nucleo:PA2
nucleo:PD1
nucleo:PD2.2
nucleo:E5V
nucleo:GND.2
nucleo:IOREF.1
nucleo:NRST.1
nucleo:3V3.1
nucleo:5V.1
nucleo:GND.3
nucleo:GND.4
nucleo:VIN.1
nucleo:PA0
nucleo:PA1
nucleo:PA4
nucleo:PB1
nucleo:PA11
nucleo:PA12
nucleo:IOREF.2
nucleo:NRST.2
nucleo:3V3.2
nucleo:5V.2
nucleo:GND.5
nucleo:GND.6
nucleo:VIN.2
nucleo:A0
nucleo:A1
nucleo:A2
nucleo:A3
nucleo:A4
nucleo:A5
nucleo:5V.3
nucleo:PA3
nucleo:PC15
nucleo:PB12.1
nucleo:PB12.2
nucleo:PB2
nucleo:GND.7
nucleo:PF3
nucleo:PA8
nucleo:PB15
nucleo:PB14
nucleo:PB13
nucleo:AGND
nucleo:PB0.1
nucleo:PD3
nucleo:PB8
nucleo:PB9
nucleo:AVDD.1
nucleo:GND.8
nucleo:PA5
nucleo:PA6
nucleo:PA7
nucleo:PB0.2
nucleo:PC7
nucleo:PA9
nucleo:PA15
nucleo:PB5
nucleo:PB4
nucleo:PB10
nucleo:PB3
nucleo:PA10
nucleo:PB6
nucleo:PB7
nucleo:D15
nucleo:D14
nucleo:AVDD.2
nucleo:GND.9
nucleo:D13
nucleo:D12
nucleo:D11
nucleo:D10
nucleo:D9
nucleo:D8
nucleo:D7
nucleo:D6
nucleo:D5
nucleo:D4
nucleo:D3
nucleo:D2
nucleo:D1
nucleo:D0
logic1:D0
logic1:D1
logic1:D2
logic1:D3
logic1:D4
logic1:D5
logic1:D6
logic1:D7
logic1:GND