#include "gpio.h"
void led_rcc_init()
{
RCC->MP_AHB4ENSETR &= (~(0x3<<4));
RCC->MP_AHB4ENSETR |= ((0x3<<4));
}
void led_gpio_init(gpio_t* gpio,unsigned int pin)
{
gpio->MODER &= (~(0x3<<(pin*2)));
gpio->MODER |= (0x1<<(pin*2));
gpio->OTYPER &= (~(0x1<<pin));
gpio->OSPEEDR &=(~(0x3<<(pin*2)));
gpio->PUPDR &=(~(0x3<<(pin*2)));
}
void led_on(gpio_t* gpio,unsigned int pin)
{
gpio->ODR |= 0x1<<pin;
}
void led_off(gpio_t* gpio,unsigned int pin)
{
gpio->ODR &= (~(0x1<<pin));
}
#include "uart4.h"
void uart4_rcc_init()
{
RCC->MP_AHB4ENSETR |= (0x1<<1);
RCC->MP_AHB4ENSETR |= (0x1<<6);
RCC->MP_APB1ENSETR |= (0x1<<16);
}
void uart4_gpio_init()
{
GPIOB->MODER &=(~(0x3<<4));
GPIOB->MODER |=((0x2<<4));
GPIOB->AFRL &=(~(0xf<<8));
GPIOB->AFRL |=((0x8<<8));
GPIOG->MODER &=(~(0x3<<22));
GPIOG->MODER |=((0x2<<22));
GPIOG->AFRH &=(~(0xf<<12));
GPIOG->AFRH |=((0x6<<12));
}
void uart4_init()
{
USART4->CR1 &= ~0x1;
USART4->CR1 &= (~(0x1<<28));
USART4->CR1 &= (~(0x1<<12));
USART4->CR1 &= (~(0x1<<15));
USART4->CR1 &= (~(0x1<<10));
USART4->CR2 &= (~(0x3<<12));
USART4->PRESC &= (~(0xf));
USART4->BRR |= 0x22B;
USART4->CR1 |= 0x1<<3;
USART4->CR1 |= 0x1<<2;
USART4->CR1 |= 0x1;
}
void uart4_put_char(char str)
{
while(!(USART4->ISR & (0x1<<6)));
USART4->TDR=str;
while(!(USART4->ISR & (0x1<<6)));
}
char uart4_get_char()
{
char ch;
while(!(USART4->ISR & (0x1<<5)));
ch=USART4->RDR;
return ch;
}
#include "uart4.h"
#include "gpio.h"
extern void printf(const char *fmt, ...);
void delay_ms(int ms)
{
int i,j;
for(i = 0; i < ms;i++)
for (j = 0; j < 1800; j++);
}
int main()
{
led_rcc_init();
led_gpio_init(GPIOE,10);
led_gpio_init(GPIOF,10);
led_gpio_init(GPIOE,8);
uart4_rcc_init();
uart4_gpio_init();
uart4_init();
while(1)
{
char ch=0;
ch=uart4_get_char();
if(ch=='1')
led_on(GPIOE,10);
else if(ch=='2')
led_on(GPIOF,10);
else if(ch=='3')
led_on(GPIOE,8);
else
{
led_off(GPIOE,10);
led_off(GPIOF,10);
led_off(GPIOE,8);
}
}
return 0;
}