串口实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《嵌入式系统开发》课程实验报告

班级:电信141

*名:***

学号: *********

实验日期: 5月6日

电子通信工程系

实验一串口通信实验

学时安排:2学时

一、实验目的:

1、熟悉STM32的编程环境的使用;

2、掌握STM32的串口的编程;

二、实验步骤:

1.在keil环境下编辑源文件,并编译。

2.在野火STM32实验板上运行,调试程序,观察实验现象,理解并掌握相关知识。

3.编写STM32 的串行通信程序,实现由串口调试助手输入任意字符串,STM接收后返回到串

口调试助手输出。

三、实验内容:

设计思路及程序代码。

1、建立工程,编写主要代码

2、时钟配置

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE);

3、GPIOA配置

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; // USART1_TX (PA.9)

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出

GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PA9

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //USART1_RX (PA.10)

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入

GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PA10

4、USART 初始化设置

USART_ART_BaudRate = bound;//一般设置为9600;

USART_ART_WordLength = USART_WordLength_8b;//字长为8位数据格式

USART_ART_StopBits = USART_StopBits_1;//一个停止位

USART_ART_Parity = USART_Parity_No;//无奇偶校验位

USART_ART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制

USART_ART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收发模式

USART_Init(USART1, &USART_InitStructure); //初始化串口

USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启中断

USART_Cmd(USART1, ENABLE); //使能串口

5、串口中断初始化函数

void USART1_IRQHandler(void) //串口1中断服务程序

{

u8 Res;

#ifdef OS_TICKS_PER_SEC //如果时钟节拍数定义了,说明要使用ucosII了.

OSIntEnter();

#endif

if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) {

Res =USART_ReceiveData(USART1);//(USART1->DR); //读取接收到的数据

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

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

if(Res!=0x0a)USART_RX_STA=0;//接收错误,重新开始

else USART_RX_STA|=0x8000; //接收完成了

}

else //还没收到0X0D{

if(Res==0x0d)USART_RX_STA|=0x4000;

else{

USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;

USART_RX_STA++;

if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;

} } }

#ifdef OS_TICKS_PER_SEC //如果时钟节拍数定义了,说明要使用ucosII了.

OSIntExit();

#endif }

7、在main函数编写

int main(void) {

u8 t;

u8 len;

delay_init(); //延时函数初始化

NVIC_Configuration(); // 设置中断优先级分组

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

LED_Init(); //初始化与LED连接的硬件接口

while(1) {

if(USART_RX_STA&0x8000) { //接收完毕

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

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

for(t=0;t

USART_SendData(USART1,USART_RX_BUF[t]); //发送一个字节的数据

while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET); } //等待发送结束LED1=!LED1;

delay_ms(200);

LED1=!LED1;

printf("\r\n\r\n"); //插入换行

USART_RX_STA=0;

}

else{

printf("请输入数据,以空格键结束\r\n");

delay_ms(15000); }

}

}

四、实验结果:

通过本次试验,经过一次次失败后,终于完成了串口实验;最重要的不是作出实验结果,而是你在实验结果中学会到了什么,排出困难,通过解决困难,才能学到真正的知识。学到的不仅仅是知识,还有团结和互助最重要的,学会了做实验要仔细,这样就可以避免一些不必要的麻烦,也养成了良好的习惯。

相关文档
最新文档