2.HAL库-STM32的定时器和串口综合训练

2023-05-16

关于sprintf()函数的用法

sprintf(),指的是字符串格式化函数,把格式化的数据写入某个字符串中。
int sprintf(char *string, char *format [,argument,…]);

引入头文件 #include “stdio.h“

【例】:有一个表示温度的整型变量tmp,现在要将其格式化为字符串“温度是:XX摄氏度”,并将其通过串口1发送出去。

#include "stdio.h"
 
uint8_t Str_buff[64];   
sprintf((char*)Str_buff, "温度是: %d摄氏度", tmp);    
HAL_UART_Transmit(&huart1, Str_buff, sizeof(Str_buff), 0xFFFF);

实训案例:定时器与串口综合训练

在XMF07A或XMF07C开发板上,利用STM32CubeMX和Keil5协同开发,完成以下的功能:
【1】开机后,LED1与LED2依次点亮,然后熄灭,进行灯光检测,高电平点亮LED灯。
【2】系统通过串口1向上位机发送一个字符串“=XMF07欢迎你!==”。
【3】LED1作为一个秒闪灯,系统向上位机发送完字符串后,开始亮0.5
秒,灭0.5秒….循环闪烁,并启动系统运行时间的记录,其时分秒格式为 “XX:XX:XX”。
【4】上位机通过一个由3个字节组成的命令帧控制LED2灯的开关。
该命令帧的格式为 “0xBF 控制字 0xFB”。
0xBF为帧头,0xFB为帧尾,控制字的定义如下:
0xA1:打开LED2,返回信息 “XX:XX:XX LED2打开。”
0xA2:关闭LED2,返回信息 “XX:XX:XX LED2关闭。”
其他:返回信息 “XX:XX:XX 这个一个错误指令!”。

#define LED1_ON() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET)
#define LED2_ON() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET)
#define LED1_OFF() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET)
#define LED2_OFF() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET)

#define LED1_TOG() HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9)
#define LED2_TOG() HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_8)

uint8_t str1[] = "===============XMF07欢迎你!================\r\n";
uint8_t hh = 0, mm = 0, ss = 0, ss05 = 0;
uint8_t str_buff[64];
uint8_t Rx_dat[16];
void Ckeck_LED()
{
    LED1_ON();
    HAL_Delay(500);
    LED2_ON();
    HAL_Delay(500);
	
    LED1_OFF();
    HAL_Delay(500);
    LED2_OFF();
    HAL_Delay(500);
}
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    LED1_TOG();
    ss05++;
    if(ss05 == 2)
    {
        ss05 = 0;
        ss++;
        if(ss == 60)
        {
            ss = 0;
            mm++;
            if(mm == 60)
            {
                mm = 0;
                hh++;
            }
        }
    }
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    if(huart->Instance == USART1)
    {
        if(Rx_dat[0] == 0xBF && Rx_dat[2] == 0xFB)
        {
            switch(Rx_dat[1])
            {
                case 0xa1:
                    LED2_ON();
                    sprintf((char *)str_buff,"%d:%d:%d    LED2打开!\r\n",hh,mm,ss);
                break;
				
                case 0xa2:
		    LED2_OFF();
		    sprintf((char *)str_buff,"%d:%d:%d    LED2关闭!\r\n",hh,mm,ss);
		break;
				
	        default:
		    sprintf((char *)str_buff,"%d:%d:%d    这是一个错误的命令!\r\n",hh,mm,ss);
		break;
	    }
			
            HAL_UART_Transmit(&huart1,str_buff,sizeof(str_buff),10000);
	    HAL_UART_Receive_IT(&huart1,Rx_dat,3);
        }
    }
}
//在mian()函数中添加以下代码:
Ckeck_LED();                                               //LED灯流水检测
HAL_UART_Transmit(&huart1,str1,sizeof(str1),0xFFFF);       //向上位机发送欢迎字符
HAL_UART_Receive_IT(&huart1,Rx_dat,3);                     //启动串口1接收上位机3个字节
HAL_TIM_Base_Start_IT(&htim2);                             //启动定时器TIM2

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2.HAL库-STM32的定时器和串口综合训练 的相关文章

  • 北斗卫星导航系统介绍

    北斗卫星导航系统 导言 2020年3月9日 xff0c 我国在西昌卫星发射中心用长征三号乙运载火箭 xff0c 成功发射北斗系统第五十四颗导航卫星 距离北斗三号系统建成 xff0c 仅一步之遥 从双星导航定位到54颗北斗嵌满星空 xff0c
  • PyQt vs Tkinter – 更好的 GUI 库

    PyQt 和 Tkinter 的比较 在本文中 xff0c 我将分享我自己使用两个 GUI 库 PyQt 和 Tkinter 的旅程和个人经验 我还对具有相同小部件的 Tkinter 和 PyQt GUI 进行了并排比较 本文比较了两个 P
  • Selenium 中的 XPath

    Selenium 中的 XPath 是什么 xff1f Selenium 中最常用的定位器之一 xff0c XPath xff08 也称为 XML 路径 xff09 xff0c 通过页面的 HTML 格式支持您的指南 使用 HTML DOM
  • Centos7 安装yum源

    一 安装wget的rpm包 xff1a 1 下载wget的rpm包 首先去 http mirrors 163 com centos 7 os x86 64 Packages 下找到wget的rpm包 xff0c 复制链接 xff0c 使用c
  • Redis开启远程连接

    1 开启远程连接 redis默认是不支持远程连接 xff0c 需要手动开启 xff0c 在redis conf文件中 xff0c 找到下方法代码 xff1a bind 127 0 0 1 1 这里只允许127 0 0 1登录 xff0c 注
  • NVIDIA NeMo 简介——教程和示例

    NVIDIA NeMo 是一个用于构建新的最先进对话式 AI 模型的工具包 NeMo 有自动语音识别 ASR 自然语言处理 NLP 和文本转语音 TTS 模型的单独集合 每个集合都包含预构建模块 xff0c 其中包含训练数据所需的一切 每个
  • 2010 Qt开发者大会参会总结

    参加了一天的会议该好好的总结一下 1 QML和Meego会在下一步成为重点 2 Qt和Meego在一段发展时期内会有一些过渡性的库和方案 3 Qt在下一个版本会有可能将模块分解开 4 QML的开发效率会很高 xff0c 也很炫 xff0c
  • 人工智能——你需要知道的一切

    什么是人工智能 xff1f 人工智能 一词是美国数学家和计算机科学家约翰 麦卡锡于 1956 年创造的 人工智能是机器像人类一样学习和工作的能力 人工智能的历史可以追溯到古代 机器展示基本人工智能的第一个记录示例是工程师 Wilhelm S
  • 什么是迭代开发

    移动和 Web 开发行业正在快速发展 xff0c 开发人员可以使用新的工具和方法来创建更好的应用程序 为取得成功 xff0c 企业和开发人员必须紧跟软件开发生命周期和技术的最新发展 软件开发生命周期帮助公司高效地交付高质量的产品并减少错误
  • 如何安全升级 TiDB

    作为一个快速成长的开源 NewSQL 数据库 xff0c TiDB经常发布新特性和改进 如果您是 TiDB 用户 xff0c 您可能会发现很难决定是否升级您的版本 您可能也想知道如何让您的升级之旅更安全 更顺畅 xff0c 甚至不被企业注意
  • 推流是什么,直播为什么要推流

    直播可以快速准确地传递现场信息 xff0c 给大家带去强烈的现场感 xff0c 越来越多的人通过网站和手机来观看直播 在这里 xff0c 我们将通过本文系统地向大家阐述直播中另一个重要的操作环节推流 在搜索引擎上有很多朋友咨询推流是什么 x
  • 科学计算与MATLAB语言课程笔记——专题〇 初识matlab

    一 matlab优势 不需要过多了解各种数值计算方法的具体细节和计算公式 xff0c 也不需要繁琐的底层编程 可以专注与实际问题的分析和设计 xff0c 大大地提高工作效率和质量 二 matlab语言的重要功能 matlab matrix
  • 程序员编程艺术第三十四~三十五章:格子取数问题,完美洗牌算法

    第三十四 三十五章 xff1a 格子取数 xff0c 完美洗牌算法 作者 xff1a July caopengcs 绿色夹克衫 致谢 xff1a 西芹 new xff0c 陈利人 xff0c Peiyush Jain xff0c 白石 xf
  • 机器学习面试150题:不只是考SVM xgboost 特征工程

    前言 本博客曾经在10 13年连续4年整理过各大公司数据结构和算法层面的笔试题 面试题 xff0c 与此同时 xff0c 2012年起 xff0c AI越发火热 xff0c 各大公司开始陆续招AI方面的人才 xff0c 很多同学也会从网上找
  • 通俗理解LDA主题模型

    通俗理解LDA主题模 0 前言 印象中 xff0c 最开始听说 LDA 这个名词 xff0c 是缘于rickjin在2013年3月写的一个LDA科普系列 xff0c 叫LDA数学八卦 xff0c 我当时一直想看来着 xff0c 记得还打印过
  • [汇总III]微软等公司数据结构+算法面试第1-80题[前80题首次集体亮相]

    整理 III 微软等公司数据结构 43 算法面试 第1 80题 汇总 首次一次性汇总 公布 由于这些题 xff0c 实在太火了 所以 xff0c 应广大网友建议要求 xff0c 在此把之前已整理公布的前80题 xff0c 现在 xff0c
  • 微软公司等数据结构+算法面试100题(第1-100题)全部出炉

    微软等公司数据结构 43 算法面试100题 第1 100题 首次完整亮相 作者 July 2010年12月6日 更新 xff1a 现今 xff0c 这100题的答案已经全部整理出来了 xff0c 微软面试100题2010年版全部答案集锦 x
  • 读完《大数据时代》的一点儿心得

    工作一段时间之后 xff0c 总喜欢读读书 xff0c 这是多年养成下来的一个习惯 读书使人避恶 xff0c 读书使人向善 xff0c 读书使人聪慧 xff0c 读书使人高尚 xff0c 我们都是聪明人 xff0c 对吧 xff1f 哈哈哈
  • 永久勘误:微软等面试100题答案V0.2版[第1-20题答案]

    微软等面试100题答案V0 2版部分答案精选 第1 20题 作者 July 何海涛等网友 开诚布公 xff0c 接受读者检验 本文 xff0c 是根据我之前上传的 xff0c 微软等面试100题 xff0c 的答案V0 2版 第1 20题答
  • 十二之续、快速排序算法的深入分析

    十二之续 快速排序算法的深入分析 作者 July 二零一一年二月二十七日 前言 一 快速排序最初的版本 二 Hoare版本的具体分析 三 Hoare变种版本 四 快速排序的优化版本 五 快速排序的深入分析 六 Hoare变种版本与优化后版本

随机推荐