欢迎光临
我们一直在努力

[STM32F103标准库]嵌入式模拟平台USART串口通信中断模拟实验

本次实验用到嵌入式仿真教学实验平台:嵌入式仿真实验教学平台

USART原理介绍传送门:21. USART—串口通讯 — [野火]STM32库开发实战指南——基于野火指南者开发板 文档


实验目的:模拟平台使用中断来完成串口数据的发送和接受


中断控制

USART有多个中断请求事件,具体见表 USART中断请求 。(来源:野火串口文档)


模拟电路搭建:


上期的代码添加NVIC控制器的代码

NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3; //抢占优先级3
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //子优先级3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能
NVIC_Init(&NVIC_InitStructure);


配置中断函数的代码

void USART1_IRQHandler(void) //串口1中断服务程序
{
if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断
{
sbuffer = USART_ReceiveData(USART1);//接受发送数据到缓存区
Usart_SendByte(USART1, (uint8_t)sbuffer);//发送接受到的数据
Usart_SendByte(USART1, '\\n');//换行

USART_ClearITPendingBit(USART1, USART_IT_RXNE);//清楚中断标志位
}
}


主函数

#include "stm32f10x_usart.h"
#include "sys.h"
#include "stm32f10x_conf.h"
#include "delay.h"
#include "usart.h"
#include <stdint.h>
#include <stdio.h>

uint16_t sbuffer;

int main(void)
{
uart_init(115200);

while(1)
{

}
}
void USART1_IRQHandler(void) //串口1中断服务程序
{
if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断
{
sbuffer = USART_ReceiveData(USART1);
Usart_SendByte(USART1, (uint8_t)sbuffer);
Usart_SendByte(USART1, '\\n');
//Usart_SendString(USART1, "\\nHELLO CSDN");
USART_ClearITPendingBit(USART1, USART_IT_RXNE);
}
}


编译 运行

这里我们只展示了单字节的发送以及接收 多字节发送的希望大家自己动手实现以下 嘿嘿

赞(0)
未经允许不得转载:171主机测评 » [STM32F103标准库]嵌入式模拟平台USART串口通信中断模拟实验
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址