STM32F103学习笔记(四) 串口实验
扫描二维码
随时随地手机看文章
串口通信,首先进行串口的设置:
串口设置的一般步骤可以总结为如下几个步骤:
1) 串口时钟使能, GPIO 时钟使能
2) 串口复位
3) GPIO 端口模式设置
4) 串口参数初始化
5) 开启中断并且初始化 NVIC(如果需要开启中断才需要这个步骤)
6) 使能串口
7) 编写中断处理函数
串口设置原子已经写在usart.c里边了,会拉进来用就行了
//初始化IO串口1
//bound:波特率
voiduart_init(u32bound)
{
GPIO_InitTypeDefGPIO_InitStructure;
USART_InitTypeDefUSART_InitStructure;
NVIC_InitTypeDefNVIC_InitStructure;
//①串口时钟使能,GPIO时钟使能,复用时钟使能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|
RCC_APB2Periph_GPIOA,ENABLE);//使能USART1,GPIOA时钟
//②串口复位
USART_DeInit(USART1);//复位串口1
//③GPIO端口模式设置
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;//ISART1_TXPA.9
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽输出
GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化GPIOA.9
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;//USART1_RXPA.10
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//浮空输入
GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化GPIOA.10
//④串口参数初始化
USART_InitStructure.USART_BaudRate=bound;//波特率设置
主要看主函数是怎么写的,main.c:
#include"led.h"
#include"delay.h"
#include"key.h"
#include"sys.h"
#include"usart.h"
intmain(void)
{
u8t;
u8len;
u16times=0;
delay_init();//延时函数初始化
NVIC_Configuration();//设置NVIC中断分组2
uart_init(9600);//串口初始化波特率为9600
LED_Init();//LED端口初始化
KEY_Init();//初始化与按键连接的硬件接口
while(1)
{
if(USART_RX_STA&0x8000)
{len=USART_RX_STA&0x3f;//得到此次接收到的数据长度
printf("rn您发送的消息为:rnrn");
for(t=0;t {USART_SendData(USART1,USART_RX_BUF[t]);//向串口1发送数据 while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET); //等待发送结束 } printf("rnrn");//插入换行 USART_RX_STA=0; }else {times++; if(times%5000==0) {printf("rn串口实验rn"); printf("哥很霸气rnrn"); } if(times%200==0)printf("请输入数据,以回车键结束n"); if(times%30==0)LED0=!LED0;//闪烁LED,提示系统正在运行. delay_ms(10); } } USART_RX_STA&0x8000) {len=USART_RX_STA&0x3f; 说实话,这两句没看懂,只知道0x8000对应的2进制 100000000000000 ,0x3fff 对应的2进制 0011111111111111
那个NVIC_Configuration();可以点击右键go to看它的定义,设置NVIC中断分组2
USART_SendData(USART1, USART_RX_BUF[t]); //向串口 1 发送数据
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
第一句,其实就是发送一个字节到串口。第二句呢,就是我们在我们发送一个数据到串口
之后,要检测这个数据是否已经被发送完成了。 USART_FLAG_TC 是宏定义的数据发送完成标识符