.串口控制三盏灯亮灭
main.c
#include "led.h"
#include"uart.h"
void delay(int ms)
{
int i,j;
for(i=0;i<ms;i++)
{
for (j=0;j<2000;j++)
{
/* code */
}
}
}
int main()
{
//led��ʼ��
all_led_init();
/*
while(1)
{
LED1_ON();
LED2_OFF();
LED3_OFF();
delay(500);
LED2_ON();
LED1_OFF();
LED3_OFF();
delay(500);
LED3_ON();
LED2_OFF();
LED1_OFF();
delay(500);
}
return 0;*/
//���ڳ�ʼ��
uart4_init();
//char i;
char buf[32];
while(1)
{
// i=getchar();
// putchar(i+1);
//���յ�����������a�����ڹ�����ʾb
gets(buf);
if(strcmp(buf,"LED1 ON")==0)
{
LED1_ON();
puts("LED1_ON success\r\n");
}
else if(strcmp(buf,"LED2 ON")==0)
{
LED2_ON();
puts("LED2_ON success");
}
else if(strcmp(buf,"LED3_ON")==0)
{
LED3_ON();
puts("LED3_ON SUCEESSS");
}
//puts(buf);
else
{
puts("error\r\n");
}
}
return 0;
}
src/uart4.c
#include "uart4.h"
void uart4_init()
{
//ʹ��GPIOB GPIOG UART4����ʱ��
RCC->MP_AHB4ENSETR |= (0x1<<1);//GPIOB
RCC->MP_AHB4ENSETR |= (0x1<<6);//GPIOG
RCC->MP_APB1ENSETR |= (0X1<<16);//UART4
//����PB2��PG11�ܽŸ���
//PB2
GPIOB->MODER &= (~(0x3<<4));
GPIOB->MODER |=(0x2<<4);
GPIOB->AFRL &= (~(0XF<<8));
GPIOB->AFRL |= (0x8<<8);
//PG11
GPIOG->MODER &= (~(0x3<<22));
GPIOG->MODER |=(0x2<<22);
GPIOG->AFRH &= (~(0XF<<12));
GPIOG->AFRH |= (0x6<<12);
//���ô��ڲ�ʹ�� UE=0
USART4->CR1 &= (~(0X1));
//����8λ����λ
USART4->CR1 &= (~(0x1<<12));
USART4->CR1 &= (~(0x1<<28));
//����û����żУ��λ
USART4->CR1 &= (~(0x1<<10));
//����1λֹͣλ
USART4->CR2 &= (~(0x3<<12));
//����16��������
USART4->CR1 &= (~(0x1<<15));
//����ʱ�Ӳ���Ƶ
USART4->PRESC &= (~(0xF));
//���ò�����Ϊ115200
USART4->BRR=0X22B;
//ʹ�ܷ�����
USART4->CR1 |= (0x1<<3);
//ʹ�ܽ�����
USART4->CR1 |= (0x1<<2);
//ʹ��uart4
USART4->CR1 |= (0x1<<0);
}
//����һ���ַ�
void putchar(char a)
{
//���жϷ������ݼĴ����Ƿ�Ϊ��
//��Ϊ�������ȴ�
while(!(USART4->ISR&(0x1<<7)));
//Ϊ�����������ݼĴ���д��a������
USART4->TDR=a;//�����
//д��������Ҫ�жϷ����Ƿ����ɣ������������ȴ�������������������
while(!(USART4->ISR&(0x1<<6)));
}
//����һ���ַ�
char getchar()
{
char a;
//���жϽ������ݼĴ�������û�����õ�����
//��������û�������������ȴ�
while(!(USART4->ISR&(0x1<<5)));
//������������������ȡ
a=USART4->RDR;
//��ȡ���Ͻ���ȡ�������ݷ���
return a;
}
//�����ַ���
void puts(char *s)
{
while(*s)
{
putchar(*s);
s++;
}
putchar('\n');// '\n'�л�����һ��
putchar('\r');//'\n'�س������л�����ͷ
}
//�����ַ�������
void gets(char *s)
{
while(1)
{
*s=getchar();
putchar(*s);
if((*s)=='\r')
break;
s++;
}
*s='\0';
putchar('\n');//����
}
//���д��ڽ����ַ��Ƚ�
int strcmp(char *src,char *dest)
{
char *p =src ,*q=dest;
while(*p==*q&&*p!='\0'&&*q!='\0')
{
p++;
q++;
}
if(*p>*q)
{
return 1;
}
else if(*p<*q)
{
return -1;
}
else
{
return 0;
}
}
uart4.h
#ifndef __UART4_H__
#define __UART4_H__
#include "stm32mp1xx_uart.h"
#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_gpio.h"
void uart4_init();
void putchar(char a);
char getchar();
#endif