Загрузка данных


#include "MDR32Fx.h"
#include "MDR32F9Qx_port.h"
#include "MDR32F9Qx_rst_clk.h"

volatile uint32_t ms_tick = 0;

void SysTick_Handler(void) { ms_tick++; }

void delay_ms(uint32_t ms) {
    uint32_t start = ms_tick;
    while ((ms_tick - start) < ms);
}

void init_systick(void) {
    SysTick->LOAD = (8000000 / 1000) - 1;
    SysTick->VAL  = 0;
    SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |
                    SysTick_CTRL_TICKINT_Msk |
                    SysTick_CTRL_ENABLE_Msk;
}

void init_uart_tx(void) {
    // Тактирование порта B и UART1
    RST_CLK_PCLKcmd(RST_CLK_PCLK_PORTB | RST_CLK_PCLK_UART1, ENABLE);

    // Настройка PB5 (TX) как альтернативной функции
    PORT_InitTypeDef PortInit;
    PORT_StructInit(&PortInit);
    PortInit.PORT_Pin   = PORT_Pin_5;
    PortInit.PORT_OE    = PORT_OE_OUT;
    PortInit.PORT_FUNC  = PORT_FUNC_ALTER;
    PortInit.PORT_MODE  = PORT_MODE_DIGITAL;
    PortInit.PORT_SPEED = PORT_SPEED_FAST;
    PORT_Init(MDR_PORTB, &PortInit);

    // Настройка скорости UART (57600 при 8 МГц)
    MDR_UART1->IBRD = 8;
    MDR_UART1->FBRD = 44;

    // Формат кадра: 8 бит, 1 стоп, без паритета, FIFO выкл
    MDR_UART1->LCR_H = (3 << 5) | (0 << 4) | (0 << 3) | (0 << 2) | (0 << 1) | (0 << 0);

    // Включить передатчик и UART
    MDR_UART1->CR = (1 << 8) | (1 << 0);  // TXE + UARTEN
}

int main(void) {
    // Явно включаем HSI (8 МГц)
    MDR_BKP->REG_0F |= (1 << 22);
    while (!(MDR_BKP->REG_0F & (1 << 23)));
    MDR_RST_CLK->CPU_CLOCK = (0 << 8) | (0 << 2);  // HCLK = HSI

    init_systick();
    init_uart_tx();

    while (1) {
        // Ждём, пока передатчик не освободится (TXFF = 0)
        while (MDR_UART1->FR & (1 << 5));
        // Отправляем байт 0x55
        MDR_UART1->DR = 0x55;
        delay_ms(1000);
    }
}