【嵌入式操作系统】实验3:中断及串口编程


一、实验目的

  1. 熟悉STM32 模块的串口的硬件连接;
  2. 掌握串口的初始化方法,数据发送和接收函数;
  3. 掌握中断初始化方法,中断服务函数;
  4. 编程利用PC上的串口调试助手,控制板上LED D7、D8;
  5. 熟练KEIL 工程的配置,编译,调试,下载。

二、实验环境

  1. 操作系统:WINDOWS 10
  2. 开发工具:Keil 4,UartAssists
  3. 实验设备:125K RFID读写器模块、JLink在线调试器、电源、USB转串口、PC

三、实验内容

1.实验任务

  运行程序后,LED灯D7、D8按照全熄灭,并循环向串口发送”hello world”。通过串口发送指令‘O‘,’F‘,控制灯亮或熄灭。
  本实验所使用的是125K RFID读写器模块、JLink在线调试器、USB转串口、电源、PC。

2.实验步骤

1.查看硬件原理图,查找板上RS232相关的LED D2、D3,及RX、TX所连接的GPIO口;
在这里插入图片描述
2.打开给定STM32工程模板,工程文件在Object文件夹下。了解模板主要文件作用;
3.了解USART固件库、misc固件库中函数的作用,参考文档《STM32固件库使用手册(中文)》,重点分析;掌握USART_Init()、USART_SendData()、USART_ReceiveData()、USART_GetFlagStatus()、USART_ClearITPendingBit、NVIC_Init()、NVIC_SetVectorTable()、NVIC_PriorityGroupConfig()、USART_ITConfig()的作用和用法;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
4.查看代码,USART1的初始化函数USART_Cfg(),参数如下:波特率38400,数据位8位,停止位1位,无校验位,无流控;USART1的中断初始化代码,使能接收中断;
在这里插入图片描述
5.在主函数中调用GPIO、中断初始化后,利用USART_SendData()函数循环发送”helloworld”;
在这里插入图片描述
6.编译下载运行,在PC机上打开串口调试助手USSART.EXE,连接后,查看能否收到;
在这里插入图片描述
7.打开串口的中断服务函数USART1_IRQHandler( )。判断是否可接受,接受一个字符。判断如为‘O’,打开D7、D8两个LED;如为‘F’,则关闭两个LED灯;
8.再次编译运行,从串口助手中分别发送O或F,测试功能是否正常
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
源代码:

#include"main.h"
int main(void) 
{ 
	
   	unsigned char str[]="helloworld\n";
	    unsigned int k=0;
   	RCC_Configuration(); 

   	USARTInit();
  
   	USART_ClearFlag(USART1,USART_FLAG_TC);
		
		while(*(str+k)!='\0')
		{
			USART_SendData(USART1, *(str+k));
		
			while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
			k++;
		}
		while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET); 
}

#include"main.h"
/*------------------------------------------------------------------
函数名:  GPIO_config
功能:    GPIO初始化,配置LED D7,D8对应管脚为推挽输出;
入口参数:无
出口参数:无
-------------------------------------------------------------------*/
void GPIO_config(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_13; //SHD,MOD也在里面呢
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode= GPIO_Mode_Out_PP;
    GPIO_Init(GPIOB, &GPIO_InitStructure); 
}
/*------------------------------------------------------------------
函数名:  Delay_ARMJISHU
功能:    延时
入口参数:无
出口参数:无
-------------------------------------------------------------------*/
void Delay_ARMJISHU(__IO uint32_t nCount)	//延时程序
{
   unsigned int i,k;
   for(i=0;i<nCount;i++)
  	  for(k=0;k<12000;k++);
}

#include"main.h"

/********************************************************************************** 
*   函数名称:USART1_IRQHandler
*   功    能:串口1接收中断函数
*   入口参数:无
*   出口参数:无
**********************************************************************************/
void USART1_IRQHandler(void)
{	
   	unsigned char uart_in_buffer;
   	while(USART_GetITStatus(USART1, USART_IT_RXNE)!= RESET)
	  {			 			 
		  uart_in_buffer = USART_ReceiveData(USART1);
		   if(uart_in_buffer=='O')
		   {
		   		GPIO_ResetBits(GPIOB,GPIO_Pin_12);
				GPIO_ResetBits(GPIOB,GPIO_Pin_13);
				Delay_ARMJISHU(1000);
		   }
		   if(uart_in_buffer=='F')
		   {
		   		GPIO_SetBits(GPIOB,GPIO_Pin_12);
				GPIO_SetBits(GPIOB,GPIO_Pin_13);
				Delay_ARMJISHU(1000);
		   }
		   USART_ClearITPendingBit(USART1,USART_IT_RXNE);
		 
	  }		 					  			   					 
}

总结

  串口通讯(Serial Communication)是一种设备间非常常用的串行通讯方式,因为它简单便捷,因此大部分电子设备都支持该通讯方式,其通讯协议可分层为协议层和物理层。物理层规定通信协议中具有机械、电子功能的特性,从而确保原始数据在物理媒体的传播;协议层主要规定通讯逻辑,统一双方的数据打包、解包标准。通俗的讲物理层规定我们用嘴巴还是肢体交流,协议层规定我们用中文还是英文交流。下面分析一下串口通讯协议的物理层和协议层。
  USART(通用同步异步收发器)是一个串行通信设备,可以灵活地与外部设备进行全双工数据交换。有别于 USART 还有一个UART,它是在 USART 基础上裁剪掉了同步通信功能,只有异步通信。简单区分同步和异步就是看通信时需不需要对外提供时钟输出,我们平时用的串口通信基本都是 UART。USART 在 STM32 应用最多莫过于“打印”程序信息,一般在硬件设计时都会预留一USART 通信接口连接电脑,用于在调试程序是可以把一些调试信息“打印”在电脑端的串口调试助手工具上,从而了解程序运行是否正确、如果出错哪具体哪里出错等等。
  在stm32f10x_it.c中编写USART1中断源相对应得中断函数,利用了固件库函数中的
  USART_ReceiveData(DEBUG_USARTx);接收函数
  USART_SendData(DEBUG_USARTx, x);发送函数
  USART_GetITStatus(DEBUG_USARTx, USART_IT_RXNE);判断标志位函数
  通过这次实验,熟悉STM32 模块的串口的硬件连接;了解了串口的初始化方法,数据发送和接收函数;掌握中断初始化方法,中断服务函数;掌握USART_Init()、USART_SendData()、USART_ReceiveData()、USART_GetFlagStatus()、USART_ClearITPendingBit、NVIC_Init()、NVIC_SetVectorTable()、NVIC_PriorityGroupConfig()、USART_ITConfig()的作用和用法;编程利用PC上的串口调试助手,控制板上LED D7、D8;

版权声明:本文为CSDN博主「悠哟哟」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_45614178/article/details/122523330

生成海报
点赞 0

悠哟哟

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

打开keil5提示缺少“TOOLS.INI“问题解决方法

之前用快捷方式打开keil5发现突然弹出如图所示提示: 提示我的keil根目录下缺少TOOLS.INI,然后打不开keil5。后来查了一下真的根目录下的真的没有这个配置文件,于是在MDK5目录里面的找

串口-RS232/RS485-TTL/CMOS

目录 串口通信基本原理 串口、RS-232、RS-485 (1)物理接口形式 (2)电平标准 TTL与CMOS: RS-232、RS-485、RS-422 串口形式

8522A+7段数码管显示实验

1、8255A简介 8255A是Intel公司生产的可编程并行I/O接口芯片,有3个8位并行I/O口。具有3个通道3种工作方式的可编程并行接口芯片(40引脚)。 其各口功能可由软件选择,

STM32基于HAL库的DS18B20实现

开发板:野火挑战者_V2 GPIO:PE2 创建工程 使能USART1 用来通过串口打印温度值 配置GPIO 代码编写 我们先打开 DS18B20 的手册 1、DS18B20 复位与存在脉冲 复位 /*