您现在的位置: 主页 > MCU > 单片机技术应用 > STM32F103学习笔记(四) 串口实验 -
本文所属标签:
为本文创立个标签吧:

STM32F103学习笔记(四) 串口实验 -

来源: 网络用户发布,如有版权联系网管删除 2018-09-07 

[导读]串口通信,首先进行串口的设置:串口设置的一般步骤可以总结为如下几个步骤:1) 串口时钟使能, GPIO 时钟使能2) 串口复位3) GPIO 端口模式设置4) 串口参数初始化5) 开启中断并且初始化 NVIC(如果需要开启中断才需要

串口通信,首先进行串口的设置:

本文引用地址: http://www.21ic.com/app/mcu/201808/780918.htm

串口设置的一般步骤可以总结为如下几个步骤:
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);

}

}


那个NVIC_Configuration();可以点击右键go to看它的定义,设置NVIC中断分组2


USART_RX_STA&0x8000)

{len=USART_RX_STA&0x3f;

说实话,这两句没看懂,只知道0x8000对应的2进制 100000000000000 ,0x3fff 对应的2进制 0011111111111111

USART_SendData(USART1, USART_RX_BUF[t]); //向串口 1 发送数据
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
第一句,其实就是发送一个字节到串口。第二句呢,就是我们在我们发送一个数据到串口
之后,要检测这个数据是否已经被发送完成了。 USART_FLAG_TC 是宏定义的数据发送完成标识符




              查看评论 回复



嵌入式交流网主页 > MCU > 单片机技术应用 > STM32F103学习笔记(四) 串口实验 -
 

"STM32F103学习笔记(四) 串口实验 -"的相关文章

网站地图

围观()