×
单片机 > 单片机程序设计 > 详情

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

发布时间:2020-08-26 发布时间:
|

串口,可以理解为是用来和上位机(比如电脑)对话的,本节实验实现的是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("rn泥发送的消息为:rn");

for(i=0;i

{

USART1->DR=USART_RX_BUF[i];

while((USART1->SR&0X40)==0);//等待发送结束

}

printf("rnrn");

USART_RX_STA=0;

}

else//不接收数据时

{

++times;

if(times%5000==0)printf("rnlovern");

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一直闪烁。。说明程序应该没问题

关键字:cortex_m3  stm32  串口实验  串口通信 


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
单片机制作超级流水灯