#include "stm8s.h" #include void Delay(uint16_t nCount) { uint8_t i; for (; nCount != 0; nCount--) { for (i = 255; i != 0; i--) {} } } void putchar(char c) { while ((UART1->SR & UART1_SR_TXE) == 0); UART1->DR = (u8)c; } void puts(const char *ch) { char c; while ((c = *ch++) != 0) putchar(c); } void puts_itoa(int32_t n, unsigned char radix) { char s[10], i, c; _ltoa(n, s, radix); i = 0; while((c = s[i++]) != 0) { putchar(c); } } void main(void) { // Disable div8 CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); // LED for blinking GPIO_Init(GPIOB, GPIO_PIN_5, GPIO_MODE_OUT_PP_HIGH_FAST); // minimal uart init UART_SimpleInit(UART_BAUD_115200); // irq conf UART1_ITConfig(UART1_IT_RXNE_OR, ENABLE); enableInterrupts(); // Clear screen & print system frequency puts("\033c\033[?25lClock freq = "); // cls puts_itoa(CLK_GetClockFreq(), 10); puts(" Hz"); // cls // echo & blinking while (1) { Delay(2000); GPIOB->ODR ^= GPIO_PIN_5; } } /** * @brief UART1 RX Interrupt routine. * @param None * @retval None */ INTERRUPT_HANDLER(UART1_RX_IRQHandler, 18) { if (UART1->SR & UART1_SR_RXNE) UART1->DR = (u8) (UART1->DR); // echo if (UART1->SR & UART1_SR_OR) UART1->SR &= ~UART1_SR_OR; // clear OR flag }