【嵌入式系统实践】实验二USART参考代码

2024-05-16 01:36

本文主要是介绍【嵌入式系统实践】实验二USART参考代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

发布此文目的仅为保存先前设计代码,方便日后复盘使用


代码功能:

        通过USART实现上位机与下位机的串口通讯功能,基础实现上位机向下位机传输一个消息,之后下位机复读传回该消息。此外,还实现上位机传到下位机的信息通过某种算法加密,并传回上位机;以及当上位机发出一个0-9内数字的消息后,在LED灯上二进制地显示所传数字。

#include "STM32F10X.h"
#include "stdio.h"void GPIO_SETTING(void)		//LED Setting
{GPIO_InitTypeDef gpio_init;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);gpio_init.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;gpio_init.GPIO_Mode = GPIO_Mode_Out_PP; gpio_init.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB,&gpio_init);
}void USART_Config(void)
{GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef  USART_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;    	//PA9,TXGPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_Init(GPIOA,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;  	//PA10,RXGPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, &GPIO_InitStructure);USART_InitStructure.USART_BaudRate = 9600;  USART_InitStructure.USART_WordLength = USART_WordLength_8b; 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_Cmd(USART1, ENABLE);     USART_Init(USART1, &USART_InitStructure);  
}void Delay(u16 i)
{int j = 120;for(;j>=0;j--){while(i--);}
}int main(void)
{uint16_t i;GPIO_SETTING();USART_Config();printf("Please Input string ! \r\n");GPIO_WriteBit(GPIOB, GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7, Bit_RESET);	//Signal of Actually OpenDelay(65535);GPIO_WriteBit(GPIOB, GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7, Bit_SET);while(1){GPIO_WriteBit(GPIOB, GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7, Bit_SET);if(USART_GetFlagStatus(USART1,USART_FLAG_RXNE)==SET){i = USART_ReceiveData(USART1);if(i == 49){printf("this is 1\r\n");GPIO_WriteBit(GPIOB, GPIO_Pin_7, Bit_RESET);Delay(65535);}else if(i == 50){printf("this is 2\r\n");GPIO_WriteBit(GPIOB, GPIO_Pin_6, Bit_RESET);Delay(65535);}else if(i == 51){printf("this is 3\r\n");GPIO_WriteBit(GPIOB, GPIO_Pin_6 | GPIO_Pin_7, Bit_RESET);Delay(65535);}else if(i == 52){printf("this is 4\r\n");GPIO_WriteBit(GPIOB, GPIO_Pin_5, Bit_RESET);Delay(65535);}else if(i == 53){printf("this is 5\r\n");GPIO_WriteBit(GPIOB, GPIO_Pin_5 | GPIO_Pin_7, Bit_RESET);Delay(65535);}else if(i == 54){printf("this is 6\r\n");GPIO_WriteBit(GPIOB, GPIO_Pin_5 | GPIO_Pin_6, Bit_RESET);Delay(65535);}else if(i == 55){printf("this is 7\r\n");GPIO_WriteBit(GPIOB, GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7, Bit_RESET);Delay(65535);}else if(i == 56){printf("this is 8\r\n");GPIO_WriteBit(GPIOB, GPIO_Pin_4, Bit_RESET);Delay(65535);}else if(i == 57){printf("this is 9\r\n");GPIO_WriteBit(GPIOB, GPIO_Pin_4 | GPIO_Pin_7 , Bit_RESET);Delay(65535);}else if((i<48 && i>32 )|| i>57){USART_SendData(USART1, i+3);//printf("\r\n");}else {USART_SendData(USART1, i);}while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);}}
}

 

这篇关于【嵌入式系统实践】实验二USART参考代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/993498

相关文章

基于Canvas的Html5多时区动态时钟实战代码

《基于Canvas的Html5多时区动态时钟实战代码》:本文主要介绍了如何使用Canvas在HTML5上实现一个多时区动态时钟的web展示,通过Canvas的API,可以绘制出6个不同城市的时钟,并且这些时钟可以动态转动,每个时钟上都会标注出对应的24小时制时间,详细内容请阅读本文,希望能对你有所帮助...

HTML5 data-*自定义数据属性的示例代码

《HTML5data-*自定义数据属性的示例代码》HTML5的自定义数据属性(data-*)提供了一种标准化的方法在HTML元素上存储额外信息,可以通过JavaScript访问、修改和在CSS中使用... 目录引言基本概念使用自定义数据属性1. 在 html 中定义2. 通过 JavaScript 访问3.

Linux系统之authconfig命令的使用解读

《Linux系统之authconfig命令的使用解读》authconfig是一个用于配置Linux系统身份验证和账户管理设置的命令行工具,主要用于RedHat系列的Linux发行版,它提供了一系列选项... 目录linux authconfig命令的使用基本语法常用选项示例总结Linux authconfi

Nginx实现高并发的项目实践

《Nginx实现高并发的项目实践》本文主要介绍了Nginx实现高并发的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录使用最新稳定版本的Nginx合理配置工作进程(workers)配置工作进程连接数(worker_co

Flutter监听当前页面可见与隐藏状态的代码详解

《Flutter监听当前页面可见与隐藏状态的代码详解》文章介绍了如何在Flutter中使用路由观察者来监听应用进入前台或后台状态以及页面的显示和隐藏,并通过代码示例讲解的非常详细,需要的朋友可以参考下... flutter 可以监听 app 进入前台还是后台状态,也可以监听当http://www.cppcn

Python使用PIL库将PNG图片转换为ICO图标的示例代码

《Python使用PIL库将PNG图片转换为ICO图标的示例代码》在软件开发和网站设计中,ICO图标是一种常用的图像格式,特别适用于应用程序图标、网页收藏夹图标等场景,本文将介绍如何使用Python的... 目录引言准备工作代码解析实践操作结果展示结语引言在软件开发和网站设计中,ICO图标是一种常用的图像

Nginx配置系统服务&设置环境变量方式

《Nginx配置系统服务&设置环境变量方式》本文介绍了如何将Nginx配置为系统服务并设置环境变量,以便更方便地对Nginx进行操作,通过配置系统服务,可以使用系统命令来启动、停止或重新加载Nginx... 目录1.Nginx操作问题2.配置系统服android务3.设置环境变量总结1.Nginx操作问题

Spring Retry 实现乐观锁重试实践记录

《SpringRetry实现乐观锁重试实践记录》本文介绍了在秒杀商品SKU表中使用乐观锁和MybatisPlus配置乐观锁的方法,并分析了测试环境和生产环境的隔离级别对乐观锁的影响,通过简单验证,... 目录一、场景分析 二、简单验证 2.1、可重复读 2.2、读已提交 三、最佳实践 3.1、配置重试模板

Java中有什么工具可以进行代码反编译详解

《Java中有什么工具可以进行代码反编译详解》:本文主要介绍Java中有什么工具可以进行代码反编译的相关资,料,包括JD-GUI、CFR、Procyon、Fernflower、Javap、Byte... 目录1.JD-GUI2.CFR3.Procyon Decompiler4.Fernflower5.Jav

javaScript在表单提交时获取表单数据的示例代码

《javaScript在表单提交时获取表单数据的示例代码》本文介绍了五种在JavaScript中获取表单数据的方法:使用FormData对象、手动提取表单数据、使用querySelector获取单个字... 方法 1:使用 FormData 对象FormData 是一个方便的内置对象,用于获取表单中的键值