好文档 - 专业文书写作范文服务资料分享网站

串口实验报告

天下 分享 时间: 加入收藏 我要投稿 点赞

《嵌入式系统开发》课程实验报告 班 级: 电 信141 姓 名: 冯 录 鹏 学 号: 140407112 实验日期: 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 //USART1_RX

(PA.10)

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入 GPIO_Init(GPIOA, &GPIO_InitStructure);

//初始化PA10

4、USART 初始化设置

USART_InitStructure.USART_BaudRate = bound;//一般设置为9600;

USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式 USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位 USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位

USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数

据流控制

USART_InitStructure.USART_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;

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

#ifdef OS_TICKS_PER_SEC

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;

}

}

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

#ifdef OS_TICKS_PER_SEC

OSIntExit();

#endif }

7、在main函数编写

int main(void) {

u8 t; u8 len; delay_init();

//延时函数初始化 // 设置中断优先级分组 //串口初始化为9600

//初始化与LED连接的硬件接口

NVIC_Configuration(); uart_init(9600); LED_Init();

while(1) {

if(USART_RX_STA&0x8000) { } else{

len=USART_RX_STA&0x3fff;

//接收完毕

//得到此次接收到的数据长度

printf(\您发送的消息为:\\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(\ USART_RX_STA=0;

//插入换行

}

}

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

四、 实验结果:

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

3tjwa5lyf16c4rp7oypx5gf8x599ez00sul
领取福利

微信扫码领取福利

微信扫码分享