设为首页 加入收藏

TOP

STM32(6)——USART串口的使用(二)
2019-08-29 23:53:18 】 浏览:79
Tags:STM32 USART 串口 使用
级终端中通过PC机键盘按下相应的键,则这个键会发送到STM32中,并且马上返回到PC机的超级终端上,因此可以马上从超级终端的页面中看到按下的相应的键。

5、程序源代码

#include "stm32f10x_lib.h"

FlagStatus RX_status;

 void RCC_cfg();

void GPIO_cfg();

void USART_cfg();

void NVIC_cfg(); 

int main()

{

       int i;

       unsigned char TxBuf1[] = "Welcome to my STM32! Please press any key!";

       RCC_cfg();

       GPIO_cfg();

       NVIC_cfg();

       USART_cfg(); 

       //清除标志位,否则第1位数据会丢失

       USART_ClearFlag(USART1,USART_FLAG_TC); 

       //发送数据

       //PB5的作用是显示正在发送数据

       //当有数据在发送的时候,PB5会亮

       for( i=0;TxBuf1[i]!='\0';i++)

       {

              USART_SendData(USART1,TxBuf1[i]);

              GPIO_SetBits(GPIOB,GPIO_Pin_5);

              //等待数据发送完毕

              while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);

              GPIO_ResetBits(GPIOB,GPIO_Pin_5);

       }

       while(1); 

}

  

//RCC时钟配置

void RCC_cfg()

{

       //定义错误状态变量

       ErrorStatus HSEStartUpStatus;     

       //将RCC寄存器重新设置为默认值

       RCC_DeInit();

       //打开外部高速时钟晶振

       RCC_HSEConfig(RCC_HSE_ON); 

       //等待外部高速时钟晶振工作

       HSEStartUpStatus = RCC_WaitForHSEStartUp();

       if(HSEStartUpStatus == SUCCESS)

       {

              //设置AHB时钟(HCLK)为系统时钟

              RCC_HCLKConfig(RCC_SYSCLK_Div1);

              //设置高速AHB时钟(APB2)为HCLK时钟

              RCC_PCLK2Config(RCC_HCLK_Div1);

              //设置低速AHB时钟(APB1)为HCLK的2分频

              RCC_PCLK1Config(RCC_HCLK_Div2);          

              //设置FLASH代码延时

              FLASH_SetLatency(FLASH_Latency_2); 

              //使能预取指缓存

              FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

              //设置PLL时钟,为HSE的9倍频 8MHz * 9 = 72MHz

              RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); 

              //使能PLL

              RCC_PLLCmd(ENABLE); 

              //等待PLL准备就绪

              while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);

              //设置PLL为系统时钟源

              RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

              //判断PLL是否是系统时钟

              while(RCC_GetSYSCLKSource() != 0x08);

       }

         //打开GPIO时钟,复用功能,串口1的时钟

         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO | RCC_APB2Periph_USART1, ENABLE);

}

//IO口配置

void GPIO_cfg()

{

       GPIO_InitTypeDef GPIO_InitStructure;

       //PA9作为US1的TX端,打开复用,负责发送数据

       GPIO_StructInit(&GPIO_InitStructure);

       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;

       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

       GPIO_Init(GPIOA , &GPIO_InitStructure);

       //PA10作为US1的RX端,负责接收数据

       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;

       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

       GPIO_Init(GPIOA, &GPIO_InitStructure);

       //LED显示串口正在发送/接收数据

       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;

       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

       GPIO_Init(GPIOB, &GPIO_InitStructure);

} 

//串口初始化

void USART_cfg()

{

       USART_InitTypeDef USART_InitStructure;

       //将结构体设置为缺省状态

       USART_StructInit(&USART_InitStructure);

    //波特率设置为115200

       USART_InitStructure.USART_BaudRate = 115200;

       //一帧数据的宽度设置为8bits

       USART_InitStructure.USART_WordLength = USART_WordLength_8b;

       //在帧结尾传输1个停止位

       USART_InitStructure.USART_StopBits = USART_StopBits_1;

       //奇偶失能模式,无奇偶校验

       USART_InitStructure.USART_Parity = USART_Parity_No;

       //发送/接收使能

       USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

       //硬件流控制失能

       USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowCont
首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇STM32(5)——通用定时器基本定.. 下一篇树莓派3B+简单入门

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目