【嵌入式系统实践】实验二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

相关文章

利用Python调试串口的示例代码

《利用Python调试串口的示例代码》在嵌入式开发、物联网设备调试过程中,串口通信是最基础的调试手段本文将带你用Python+ttkbootstrap打造一款高颜值、多功能的串口调试助手,需要的可以了... 目录概述:为什么需要专业的串口调试工具项目架构设计1.1 技术栈选型1.2 关键类说明1.3 线程模

Python Transformers库(NLP处理库)案例代码讲解

《PythonTransformers库(NLP处理库)案例代码讲解》本文介绍transformers库的全面讲解,包含基础知识、高级用法、案例代码及学习路径,内容经过组织,适合不同阶段的学习者,对... 目录一、基础知识1. Transformers 库简介2. 安装与环境配置3. 快速上手示例二、核心模

Spring Boot 整合 SSE的高级实践(Server-Sent Events)

《SpringBoot整合SSE的高级实践(Server-SentEvents)》SSE(Server-SentEvents)是一种基于HTTP协议的单向通信机制,允许服务器向浏览器持续发送实... 目录1、简述2、Spring Boot 中的SSE实现2.1 添加依赖2.2 实现后端接口2.3 配置超时时

Python使用getopt处理命令行参数示例解析(最佳实践)

《Python使用getopt处理命令行参数示例解析(最佳实践)》getopt模块是Python标准库中一个简单但强大的命令行参数处理工具,它特别适合那些需要快速实现基本命令行参数解析的场景,或者需要... 目录为什么需要处理命令行参数?getopt模块基础实际应用示例与其他参数处理方式的比较常见问http

Java的栈与队列实现代码解析

《Java的栈与队列实现代码解析》栈是常见的线性数据结构,栈的特点是以先进后出的形式,后进先出,先进后出,分为栈底和栈顶,栈应用于内存的分配,表达式求值,存储临时的数据和方法的调用等,本文给大家介绍J... 目录栈的概念(Stack)栈的实现代码队列(Queue)模拟实现队列(双链表实现)循环队列(循环数组

Java Optional的使用技巧与最佳实践

《JavaOptional的使用技巧与最佳实践》在Java中,Optional是用于优雅处理null的容器类,其核心目标是显式提醒开发者处理空值场景,避免NullPointerExce... 目录一、Optional 的核心用途二、使用技巧与最佳实践三、常见误区与反模式四、替代方案与扩展五、总结在 Java

使用Java将DOCX文档解析为Markdown文档的代码实现

《使用Java将DOCX文档解析为Markdown文档的代码实现》在现代文档处理中,Markdown(MD)因其简洁的语法和良好的可读性,逐渐成为开发者、技术写作者和内容创作者的首选格式,然而,许多文... 目录引言1. 工具和库介绍2. 安装依赖库3. 使用Apache POI解析DOCX文档4. 将解析

C++使用printf语句实现进制转换的示例代码

《C++使用printf语句实现进制转换的示例代码》在C语言中,printf函数可以直接实现部分进制转换功能,通过格式说明符(formatspecifier)快速输出不同进制的数值,下面给大家分享C+... 目录一、printf 原生支持的进制转换1. 十进制、八进制、十六进制转换2. 显示进制前缀3. 指

Spring Boot循环依赖原理、解决方案与最佳实践(全解析)

《SpringBoot循环依赖原理、解决方案与最佳实践(全解析)》循环依赖指两个或多个Bean相互直接或间接引用,形成闭环依赖关系,:本文主要介绍SpringBoot循环依赖原理、解决方案与最... 目录一、循环依赖的本质与危害1.1 什么是循环依赖?1.2 核心危害二、Spring的三级缓存机制2.1 三

Python 中的 with open文件操作的最佳实践

《Python中的withopen文件操作的最佳实践》在Python中,withopen()提供了一个简洁而安全的方式来处理文件操作,它不仅能确保文件在操作完成后自动关闭,还能处理文件操作中的异... 目录什么是 with open()?为什么使用 with open()?使用 with open() 进行