#include "stm32f4xx.h"
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_rcc.h"
#include "stm32f4xx_usart.h"
void wait() {
volatile int i;
for(i = 0; i < 200000; ++i);
}
void wait_min() {
volatile int i;
for(i = 0; i < 10000; ++i);
}
int main(int argc, char **argv) {
RCC_AHB1PeriphClockCmd(
RCC_AHB1Periph_GPIOD,
ENABLE
);
RCC_AHB1PeriphClockCmd(
RCC_AHB1Periph_GPIOC,
ENABLE
);
RCC_APB2PeriphClockCmd(
RCC_APB2Periph_USART6,
ENABLE
);
GPIO_PinAFConfig(GPIOC, GPIO_PinSource6, GPIO_AF_USART6);
GPIO_InitTypeDef led, usartPin;
led.GPIO_Mode = GPIO_Mode_OUT;
led.GPIO_OType = GPIO_OType_PP;
led.GPIO_Pin = GPIO_Pin_12;
led.GPIO_PuPd = GPIO_PuPd_UP;
led.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &led);
usartPin.GPIO_OType = GPIO_OType_PP;
usartPin.GPIO_PuPd = GPIO_PuPd_UP;
usartPin.GPIO_Mode = GPIO_Mode_AF;
usartPin.GPIO_Pin = GPIO_Pin_6;
usartPin.GPIO_Speed = GPIO_High_Speed;
GPIO_Init(GPIOC, &usartPin);
USART_InitTypeDef usart;
USART_StructInit(&usart);
USART_Init(USART6, &usart);
USART_Cmd(USART6, ENABLE);
while(1) {
GPIO_WriteBit(GPIOD, GPIO_Pin_12, Bit_SET);
USART_SendData(USART6, 'X');
wait_min();
GPIO_WriteBit(GPIOD, GPIO_Pin_12, Bit_RESET);
wait();
}
}
I2luY2x1ZGUgInN0bTMyZjR4eC5oIgojaW5jbHVkZSAic3RtMzJmNHh4X2dwaW8uaCIKI2luY2x1ZGUgInN0bTMyZjR4eF9yY2MuaCIKI2luY2x1ZGUgInN0bTMyZjR4eF91c2FydC5oIgoKdm9pZCB3YWl0KCkgewogIHZvbGF0aWxlIGludCBpOwogIGZvcihpID0gMDsgaSA8IDIwMDAwMDsgKytpKTsKfQoKdm9pZCB3YWl0X21pbigpIHsKICB2b2xhdGlsZSBpbnQgaTsKICBmb3IoaSA9IDA7IGkgPCAxMDAwMDsgKytpKTsKfQoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KSB7CiAgUkNDX0FIQjFQZXJpcGhDbG9ja0NtZCgKICAgIFJDQ19BSEIxUGVyaXBoX0dQSU9ELAogICAgRU5BQkxFCiAgKTsKCiAgUkNDX0FIQjFQZXJpcGhDbG9ja0NtZCgKICAgIFJDQ19BSEIxUGVyaXBoX0dQSU9DLAogICAgRU5BQkxFCiAgKTsKCiAgUkNDX0FQQjJQZXJpcGhDbG9ja0NtZCgKICAgIFJDQ19BUEIyUGVyaXBoX1VTQVJUNiwKICAgIEVOQUJMRQogICk7CgogIEdQSU9fUGluQUZDb25maWcoR1BJT0MsIEdQSU9fUGluU291cmNlNiwgR1BJT19BRl9VU0FSVDYpOwoKICBHUElPX0luaXRUeXBlRGVmIGxlZCwgdXNhcnRQaW47CgogIGxlZC5HUElPX01vZGUgPSBHUElPX01vZGVfT1VUOwogIGxlZC5HUElPX09UeXBlID0gR1BJT19PVHlwZV9QUDsKICBsZWQuR1BJT19QaW4gPSBHUElPX1Bpbl8xMjsKICBsZWQuR1BJT19QdVBkID0gR1BJT19QdVBkX1VQOwogIGxlZC5HUElPX1NwZWVkID0gR1BJT19TcGVlZF81ME1IejsKCiAgR1BJT19Jbml0KEdQSU9ELCAmbGVkKTsKCiAgdXNhcnRQaW4uR1BJT19PVHlwZSA9IEdQSU9fT1R5cGVfUFA7CiAgdXNhcnRQaW4uR1BJT19QdVBkID0gR1BJT19QdVBkX1VQOwogIHVzYXJ0UGluLkdQSU9fTW9kZSA9IEdQSU9fTW9kZV9BRjsKICB1c2FydFBpbi5HUElPX1BpbiA9IEdQSU9fUGluXzY7CiAgdXNhcnRQaW4uR1BJT19TcGVlZCA9IEdQSU9fSGlnaF9TcGVlZDsKCiAgR1BJT19Jbml0KEdQSU9DLCAmdXNhcnRQaW4pOwoKICBVU0FSVF9Jbml0VHlwZURlZiB1c2FydDsKCiAgVVNBUlRfU3RydWN0SW5pdCgmdXNhcnQpOwogIFVTQVJUX0luaXQoVVNBUlQ2LCAmdXNhcnQpOwogIFVTQVJUX0NtZChVU0FSVDYsIEVOQUJMRSk7CgogIHdoaWxlKDEpIHsKICAgIEdQSU9fV3JpdGVCaXQoR1BJT0QsIEdQSU9fUGluXzEyLCBCaXRfU0VUKTsKICAgIFVTQVJUX1NlbmREYXRhKFVTQVJUNiwgJ1gnKTsKICAgIHdhaXRfbWluKCk7CiAgICBHUElPX1dyaXRlQml0KEdQSU9ELCBHUElPX1Bpbl8xMiwgQml0X1JFU0VUKTsKICAgIHdhaXQoKTsKICB9Cn0K