新闻中心

EEPW首页>嵌入式系统>设计应用> STM32之串口通信

STM32之串口通信

作者: 时间:2016-11-24 来源:网络 收藏

本文引用地址://m.amcfsurvey.com/article/201611/320972.htm

void USART1_IRQHandler(void)

{

u8 res;

if(USART1->SR&(1<<5))//接收到数据

{

res=USART1->DR;

if((USART_RX_STA&0x80)==0)//接收未完成

{

if(USART_RX_STA&0x40)//接收到了0x0d

{

if(res!=0x0a)

USART_RX_STA=0;//接收错误,重新开始

else

USART_RX_STA|=0x80; //接收完成了

}else //还没收到0X0D

{

if(res==0x0d)

USART_RX_STA|=0x40;

else

{

USART_RX_BUF[USART_RX_STA&0X3F]=res;

USART_RX_STA++;

if(USART_RX_STA>63)USART_RX_STA=0;//接收数据错误,重新开始接收

}

}

}

}

}

#endif

//该函数的重点就是判断接收是否完成,通过检测是否收到0X0D、0X0A 的连续2 个字节//(0X0D 后跟0X0A 表示回车键)来检测是否结束。当检测到这个结束序列之后,就会置//位USART_RX_STA 的最高为来标记已经收到了一次数据。之后等待外部函数清空该位//之后才开始第二次接收。所接收的数据全部存放在USART_RX_BUF 里面,一次接收数//据不能超过64个字节,否则被丢弃。

//初始化IO 串口1

//pclk2:PCLK2时钟频率(Mhz)

//bound:波特率

//CHECK OK

//091209

void uart_init(u32 pclk2,u32 bound)

{

float temp;

u16 mantissa;

u16 fraction;

temp=(float)(pclk2*1000000)/(bound*16);//得到USARTDIV

mantissa=temp;//得到整数部分

fraction=(temp-mantissa)*16; //得到小数部分

mantissa<<=4;

mantissa+=fraction;

RCC->APB2ENR|=1<<2;//使能PORTA口时钟

RCC->APB2ENR|=1<<14;//使能串口时钟

GPIOA->CRH&=0XFFFFF00F;

GPIOA->CRH|=0X000008B0;//IO状态设置

RCC->APB2RSTR|=1<<14;//复位串口1

RCC->APB2RSTR&=~(1<<14);//停止复位

//波特率设置

USART1->BRR=mantissa; // 波特率设置

USART1->CR1|=0X200C;//1位停止,无校验位.

#ifdef EN_USART1_RX//如果使能了接收

//使能接收中断

USART1->CR1|=1<<8;//PE中断使能

USART1->CR1|=1<<5;//接收缓冲区非空中断使能

MY_NVIC_Init(3,3,USART1_IRQChannel,2);//组2,最低优先级

#endif

}

主函数

#include

#include"common.h"

int main(void)

{

u8 t;

u8 len;

u16 times=0;

Stm32_Clock_Init(9); //系统时钟设置

delay_init(72);//延时初始化

uart_init(72,9600); //串口初始化为9600

while(1)

{

if(USART_RX_STA&0x80)

{

len=USART_RX_STA&0x3f;//得到此次接收到的数据长度

printf("n您发送的消息为:n");

for(t=0;t

{

USART1->DR=USART_RX_BUF[t];

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

}

printf("nn");//插入换行

USART_RX_STA=0;

}else

{

times++;

if(timesP00==0)

{

printf("n 简单的串口实验n");

}

if(times 0==0)printf("请输入数据,以回车键结束n");

delay_ms(10);

}

}

}

实验现象:




上一页 1 2 下一页

关键词:STM32串口通

评论


相关推荐

技术专区

关闭