USARTGPU学习记录

一.串口通讯的学习

1.usart文件夹

包含usart.c和usart.h,用于串口的初始化和中断接受。usart.c包含void USART1_IRQHandler(void)和void uart_init(u32 bound)两个函数。

2.usart_Init函数

void My_USART1_Init(void)
{
	//调用三个结构体指针变量
	GPIO_InitTypeDef GPIO_InitStrue;
	USART_InitTypeDef USART_InitStrue;
	NVIC_InitTypeDef NVIC_InitStrue;
	
	//①使能时钟。在使用内置外设时首先要使能相应的GPIO时钟,然后使能复用功能时钟和内置外设时钟。
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能GPIOA时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//使能USART1时钟
	
	//②初始化相应GPIO端口。将TX(PA9)设置为推挽复用输出模式,RX(PA10)设置为浮空输入模式。
	GPIO_InitStrue.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽输出
	GPIO_InitStrue.GPIO_Pin=GPIO_Pin_9;//PA9
	GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz;
  GPIO_Init(GPIOA,&GPIO_InitStrue);
	
	GPIO_InitStrue.GPIO_Mode=GPIO_Mode_IN_FLOATING;//浮空输入
	GPIO_InitStrue.GPIO_Pin=GPIO_Pin_10;//PA10
	GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz;
  GPIO_Init(GPIOA,&GPIO_InitStrue);
  
  //设置串口1的初始化参数
	USART_InitStrue.USART_BaudRate=115200;//设置波特率115200
	USART_InitStrue.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//设置无硬件数据流控制
	USART_InitStrue.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;//设置串口模式为全双工收发
	USART_InitStrue.USART_Parity=USART_Parity_No;//设置无奇偶校验位
	USART_InitStrue.USART_StopBits=USART_StopBits_1;//一个停止位
	USART_InitStrue.USART_WordLength=USART_WordLength_8b;//字长为8位
	USART_Init(USART1,&USART_InitStrue);//初始化串口
	USART_Cmd(USART1,ENABLE);//使能串口1
	
	USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//开启接收中断
	//USART1中断初始化,设置抢占优先级和子优先级的值
	NVIC_InitStrue.NVIC_IRQChannel=USART1_IRQn;//选择USART1通道
	NVIC_InitStrue.NVIC_IRQChannelCmd=ENABLE;//IQR通道使能
	NVIC_InitStrue.NVIC_IRQChannelPreemptionPriority=1;//抢占优先级1
	NVIC_InitStrue.NVIC_IRQChannelSubPriority=1;//子优先级1
	NVIC_Init(&NVIC_InitStrue);//初始化VIC寄存器
	
	
}

3.USART1_IQRHandler函数

void USART1_IRQHandler(void)函数是串口 1 的中断响应函数,当串口 1 发生了相应的中
断后,就会跳到该函数执行。相应中断函数的名字在 startup_stm32f10x_hd.s 文件中可以找到。

void USART1_IRQHandler(void)
{
	u8 res;
	 if(USART_GetITStatus(USART1,USART_IT_RXNE))//判断是否接受中断
 {
     res= USART_ReceiveData(USART1); //读取接收到的数据
     USART_SendData(USART1,res);   //发送数据
  }
}

二.串口屏的使用-Usart GPU

1.串口屏显示

站内搜GPUMAKER说明书。

void GpuSend(char * buf1)
{  u8 i=0;
 while (1)
{  if (buf1[i]!=0)
	{  USART_SendData(USART1, buf1[i]);  //发送一个byte到串口
      while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET){}; //等待发送结束
       i++;
	}
	else return;
}
}
int main(void)
 {		
	uart_init(115200);	 //串口初始化为115200
	 GpuSend("CLS(10);DS16(7,5,'0123456789',0,0);\r\n");
 	while(1){}
 }

2.做一个计时器

计时器

你可能感兴趣的:(stm32学习)