cortex_m3_stm32嵌入式学习笔记(三):串口实验(串口通信)

串口,可以理解为是用来和上位机(比如电脑)对话的,本节实验实现的是stm32接收上位机发送过来的信息,在原原本本的返回过去


stm32有5路串口,本节学习的是其中之一的USB串口(USART1)和学习IO口一样,首先要配置串口,由于原子已经配好了写在sys文件里,本渣就本着不造轮子的理念(其实是太难不懂orz),先跳过去了。。

所以本工程只需要一个main函数即可

#include "led.h"
#include "sys.h"
#include "delay.h"
#include "usart.h"
void init(void)
{
	delay_init();
	LED_Init();
	NVIC_Configuration();//设置中断分组
	uart_init(9600);//串口初始化,波特率9600
}
int main(void)
{
	u8 i,len;
	u16 times=0;
	init();
	while(1)
	{
		if(USART_RX_STA&0X8000)//接收到了数据
		{
			len=USART_RX_STA&0xfff
			//printf("\r\n泥发送的消息为:\r\n");
			for(i=0;i<len;i++)
			{
				USART1->DR=USART_RX_BUF[i];
				while((USART1->SR&0X40)==0);//等待发送结束
			}
			printf("\r\n\r\n");
			USART_RX_STA=0;
		}
		else//不接收数据时
		{
			++times;
			if(times%5000==0)printf("\r\nlove\r\n");
			if(times%30==0)LED0=!LED0;	
			delay_ms(10);
		}
	}
}
可能上面的代码有点看不懂,我们翻到usart.c 里面有这么一段代码

//串口1中断服务程序
//注意,读取USARTx->SR能避免莫名其妙的错误   	
u8 USART_RX_BUF[USART_REC_LEN];     //接收缓冲,最大USART_REC_LEN个字节.
//接收状态
//bit15,	接收完成标志
//bit14,	接收到0x0d
//bit13~0,	接收到的有效字节数目
u16 USART_RX_STA=0;       //接收状态标记	  

0x8000对应的2进制 100000000000000 

0x3fff 对应的2进制  0011111111111111


这样就很明显了。。(感觉离底层越来越远了)

将程序烧进去之后打开串口调试助手 界面显示如下:

还会看到LED一直闪烁。。说明程序应该没问题



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值