嵌入式开发学习之STM32F407串口(USART)收发数据(三)
嵌入式开发学习之STM32F407串口(USART)收发数据(三)
- 开发涉及工具
- 一、选定所使用的串口
- 二、配置串口
- 1.配置串口的I/O
- 2.配置串口参数属性
- 3.配置串口中断
- 4.串口中断在哪里处理
- 5.串口如何发送字符串
- 三、封装串口配置库文件
- 1.创建头文件(.h)文件
- 2.创建源文件(.c)文件
- 四、功能实现
此次实现目的:
1.芯片上电启动时发送“Hello Word!”
2.发送给芯片的数据,芯片又通过串口发送回来
有工程实例,链接在最底部。
开发涉及工具
开发环境(IDE):IAR-ARM8.32.4
开发板:STM32_F4VE_V2.0
下载器:J-Link
串口调试软件:XCOM_V2.6
固件库版本:STM32F4xx_DSP_StdPeriph_Lib_V1.8.0
一、选定所使用的串口
1.我使用的开发板是STM32F407VE芯片,芯片提供有6个串口。在开发板上可以看到其单独引出了串口针脚,那么我们就需要通过原理图来确认这个针脚是连接的哪一个串口,如下图所示,从原理图中我们不难看出,收发引脚是接在芯片的PA9和PA10上面的。
2.我们翻看芯片数据手册的引脚定义表,可以发现PA9对应芯片USART1_TX,PA10对应USART1_RX。现在我们就可以开始配置串口1来达到数据收发的效果。
3.注意:若我们是自己设计电路,则步骤相反。先确认要使用的串口编号,然后确认串口对应的引脚,最后才将其引出针脚
二、配置串口
我们依旧可以在固件库里面去找到关于配置USART的例程,在前面配置GPIO的时候我有提到过,这里不再赘述,直接上配置代码
1.配置串口的I/O
这里值得注意的就是要将端口设置成复用模式,其他配置相同;
void USART1_IO_Conf(void)
{GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);//IO口用作串口引脚要配置复用模式GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);GPIO_StructInit(&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;//TX引脚GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//IO口用作串口引脚要配置复用模式GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;GPIO_Init(GPIOA,&GPIO_InitStructure);GPIO_StructInit(&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//RX引脚GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;GPIO_Init(GPIOA,&GPIO_InitStructure);
}
2.配置串口参数属性
这里值得注意的还有里面调用了一个配置串口中断的函数USART1_NVICConf()(解释一下什么是中断,中断就是有一个事件发生了,我需要打断CPU现在的工作,转而来处理现在发生的事件),用在这里结合此句USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);的意思是配置的数据接收中断,比如说别的设备给我发送了字符,那么CPU你现在啥都别忙干,先来看看这个字符是什么。
void USART1_Conf(uint32_t baud)//配置函数,定义一个形参用于配置波特率
{USART_InitTypeDef USART_InitStructure;//定义配置串口的结构体变量RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);//开启串口1的时钟USART_DeInit(USART1);//大概意思是解除此串口的其他配置USART_StructInit(&USART_InitStructure);USART_InitStructure.USART_BaudRate = baud;//设置波特率USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字节长度为8bitUSART_InitStructure.USART_StopBits = USART_StopBits_1;//1个停止位USART_InitStructure.USART_Parity = USART_Parity_No ;//没有校验位USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//将串口配置为收发模式USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //不提供流控 USART_Init(USART1,&USART_InitStructure);//将相关参数初始化给串口1USART1_NVICConf();//配置串口的中断USART_ClearFlag(USART1,USART_FLAG_RXNE);//初始配置时清除接受置位USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//初始配置接收中断USART_Cmd(USART1,ENABLE);//开启串口1
}
3.配置串口中断
那要如何配置串口的中断呢,其方法如下
void USART1_NVICConf(void)
{NVIC_InitTypeDef NVIC_InitStructure;//中断控制结构体变量定义NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;//中断通道指定为USART1NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//主优先级为0NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;//次优先级为1NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//确定使能NVIC_Init(&NVIC_InitStructure);//初始化配置此中断通道
}
4.串口中断在哪里处理
那么问题来了,我产生了事件,我CPU要在哪里来查看呢,这就需要中断服务函数来实现,中断服务函数不能随意命名(但对其原来的名字进行重定义也可以),中断服务函数的名称我们在中断向量表中查找,我使用的此版固件在stm32f40_41xx.s大概120行的中断向量表里面找,然后如下编写
void USART1_IRQHandler(void)
{if(USART_GetITStatus(USART1, USART_IT_RXNE) == SET)//判断是不是真的有中断发生{USART_SendData(USART1,USART_ReceiveData(USART1));//又将数据发回去USART_ClearITPendingBit(USART1, USART_IT_RXNE); //已经处理就清楚标志位 }
}
5.串口如何发送字符串
我们写一个通过串口发送字符串的函数,可如下编写:
void Usart_SendString(USART_TypeDef* USARTx,uint8_t *data,uint32_t dataLen)
{uint32_t i;for(i = 0;i < dataLen;i ++){USART_SendData(USARTx,data[i]);//发送数据while(USART_GetFlagStatus(USARTx,USART_FLAG_TXE) == RESET);//等待发送完成}
}
三、封装串口配置库文件
由于我们配置串口和使用串口的功能函数比较多,放在一个源文件里面比较杂乱,那么我们可以直接将关于使用串口的文件封装成库文件,通过导入头文件就可使用,方法如下
1.创建头文件(.h)文件
在IAR新建一个空白文件,保存为usart.h(如何新建文件和保存文件,我在《嵌入式开发学习之STM32F407芯片IAR环境搭建空白工程(一)》有提到,不做赘述),然后语法格式如下,
#ifndef _USART_H//.h文件三要素之一
#define _USART_H//.h文件三要素之一#include "stm32f4xx.h"//依据自身工程情况导入头文件//外部可调用函数的声明
void USART1_IO_Conf(void);
void USART1_Conf(uint32_t baud);
void Usart_SendString(USART_TypeDef* USARTx,uint8_t *data,uint32_t dataLen);#endif//.h文件三要素之一
2.创建源文件(.c)文件
在IAR新建一个空白文件,保存为usart.h,然后语法格式如下,
#include "usart.h"void USART1_IO_Conf(void)
{GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);//IO口用作串口引脚要配置复用模式GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);GPIO_StructInit(&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;//TX引脚GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//IO口用作串口引脚要配置复用模式GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;GPIO_Init(GPIOA,&GPIO_InitStructure);GPIO_StructInit(&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//RX引脚GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;GPIO_Init(GPIOA,&GPIO_InitStructure);
}void USART1_NVICConf(void)
{NVIC_InitTypeDef NVIC_InitStructure;//中断控制结构体变量定义NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;//中断通道指定为USART1NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//主优先级为0NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;//次优先级为1NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//确定使能NVIC_Init(&NVIC_InitStructure);//初始化配置此中断通道
}void USART1_Conf(uint32_t baud)//配置函数,定义一个形参用于配置波特率
{USART_InitTypeDef USART_InitStructure;//定义配置串口的结构体变量RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);//开启串口1的时钟USART_DeInit(USART1);//大概意思是解除此串口的其他配置USART_StructInit(&USART_InitStructure);USART_InitStructure.USART_BaudRate = baud;//设置波特率USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字节长度为8bitUSART_InitStructure.USART_StopBits = USART_StopBits_1;//1个停止位USART_InitStructure.USART_Parity = USART_Parity_No ;//没有校验位USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//将串口配置为收发模式USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //不提供流控 USART_Init(USART1,&USART_InitStructure);//将相关参数初始化给串口1USART1_NVICConf();//配置串口的中断USART_ClearFlag(USART1,USART_FLAG_RXNE);//初始配置时清除接受置位USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//初始配置接受中断USART_Cmd(USART1,ENABLE);//开启串口1
}/******** 串口1 中断服务函数 ***********/
void USART1_IRQHandler(void)
{if(USART_GetITStatus(USART1, USART_IT_RXNE) == SET)//判断是不是真的有中断发生{USART_SendData(USART1,USART_ReceiveData(USART1));//又将数据发回去USART_ClearITPendingBit(USART1, USART_IT_RXNE); //已经处理就清楚标志位 }
}void Usart_SendString(USART_TypeDef* USARTx,uint8_t *data,uint32_t dataLen)
{uint32_t i;for(i = 0;i < dataLen;i ++){USART_SendData(USARTx,data[i]);//发送数据while(USART_GetFlagStatus(USARTx,USART_FLAG_TXE) == RESET);//等待发送完成}
}
四、功能实现
功能实现时我们在主函数中调用配置函数即可,编写如下
#include "stm32f4xx.h"
#include "delay.h"
#include "usart.h"void main()
{NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//使用了中断,则这一句必须要有USART1_IO_Conf();//配置串口的IOUSART1_Conf(115200);//串口配置成波特率115200Usart_SendString(USART1,"Hello Word!\r\n",13);//发送字符串while(1){}
}
实验结果:
工程实例链接:https://download.csdn.net/download/qq_45100839/88425993
相关文章:
![](https://img-blog.csdnimg.cn/62de859db1d64e5fb6f1729229d770cd.png)
嵌入式开发学习之STM32F407串口(USART)收发数据(三)
嵌入式开发学习之STM32F407串口(USART)收发数据(三) 开发涉及工具一、选定所使用的串口二、配置串口1.配置串口的I/O2.配置串口参数属性3.配置串口中断4.串口中断在哪里处理5.串口如何发送字符串 三、封装串口配置库文件1.创建头文…...
![](https://img-blog.csdnimg.cn/41110d9823c8426d9d31f416a4b7ed0a.png)
python:talib.BBANDS 画股价-布林线图
python 安装使用 TA_lib 安装主要在 http://www.lfd.uci.edu/~gohlke/pythonlibs/ 这个网站找到 TA_Lib-0.4.24-cp310-cp310-win_amd64.whl pip install /pypi/TA_Lib-0.4.24-cp310-cp310-win_amd64.whl 编写 talib_boll.py 如下 # -*- coding: utf-8 -*- import os impor…...
![](https://www.ngui.cc/images/no-images.jpg)
ESP32网络开发实例-自定义主机名称
自定义主机名称 文章目录 自定义主机名称1、软件准备2、硬件准备3、代码实现ESP32 的默认主机名是 expressif。 但是,如果正在使用多个 ESP32 设备,并且在某些时候希望在软接入点模式下使用它们时通过名称来区分设备。 例如,在基于物联网的项目中有多个节点,例如温度、湿度…...
![](https://img-blog.csdnimg.cn/7fbeb5170a0f454c8005b378f10e590d.png)
【ELK 使用指南 3】Zookeeper、Kafka集群与Filebeat+Kafka+ELK架构(附部署实例)
EFLKK 一、Zookeeper1.1 简介1.2 zookeeper的作用1.3 Zookeeper的特点1.5 Zookeeper的数据结构1.6 Zookeeper的应用场景1.7 Zookeeper的选举机制(重要)1.7.1 第一次启动时1.7.2 非第一次启动时 二、Zookeeper集群部署2.1 安装前准备2.2 安装 ZookeeperSt…...
![](https://img-blog.csdnimg.cn/9280157d0a9f418e9be2c86fc62180ed.png)
手写redux的connect方法, 使用了subscribe获取最新数据
一. 公共方法文件 1. connect文件 import React, { useState } from "react"; import MyContext from "./MyContext"; import _ from "lodash";// 模拟react-redux的 connect高阶函数 const connect (mapStateToProps, mapDispatchToProps) &…...
![](https://img-blog.csdnimg.cn/aa6028a8066940169daf84668c8cc8c6.png)
数据结构--B树
目录 回顾二叉查找树 如何保证查找效率 B树的定义 提炼 B树的插入和删除 概括B树的插入方法如下 B树的删除 导致删除时,结点不满足关键字的个数范围时(需要借) 如果兄弟不够借,需要合体 回顾B树的删除 B树 B树的查找 …...
![](https://img-blog.csdnimg.cn/b9a9a3c469ff43c8a799e60c2e9c532b.gif#pic_center)
【音视频|ALSA】基于alsa-lib开发ALSA应用层程序--附带源码
😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…...
![](https://img-blog.csdnimg.cn/024c21a8374947a48b5767116775a999.png)
嵌入式养成计划-43----QT QMainWindow中常用类的使用--ui界面文件--资源文件的添加--信号与槽
一百零九、QMainWindow中常用类的使用 109.1 菜单栏 QMenuBar 菜单栏 QMenuBar 最多只能有一个 109.2 工具栏 QToolBar 工具栏 QToolBar 可以有多个 109.3 状态栏QStatusBar 状态栏 QStatusBar 最多只能有一个 109.4 浮动窗口QDockWidget 浮动窗口 可以有多个 109.5 代…...
![](https://www.ngui.cc/images/no-images.jpg)
【Yarn】清除Yarn的缓存,更新Yarn本身、更新项目的依赖项
要清除Yarn的缓存,可以运行以下命令: yarn cache clean这将清除Yarn的缓存目录。 要更新Yarn本身,可以运行以下命令: yarn self-update这将下载并安装最新版本的Yarn。 如果要更新项目的依赖项,可以运行以下命令&a…...
![](https://www.ngui.cc/images/no-images.jpg)
点云从入门到精通技术详解100篇-雨雾环境下多传感器融合SLAM方法(续)
目录 4 基于球面投影的激光视觉融合里程计 4.1 引言 4.2 视觉惯性里程计 4.2.1特征点提取与匹配...
![](https://www.ngui.cc/images/no-images.jpg)
解决GET请求入参@NotNull验证不生效问题
一、问题 get请求NotNull验证不生效 二、解决方案 两个步骤: 在该方法的controller类上加Validated;在参数面前加NotNull; 三、其他注解 //被注释的元素必须为null Null //被注释的元素不能为null NotNull //被注释的元素必须为true Ass…...
![](https://img-blog.csdnimg.cn/4a3d2dc909d846f3ade748eb38789629.png#pic_center)
《golang设计模式》第三部分·行为型模式-01-责任链模式(Chain of Responsibility)
文章目录 1 概念1.1 角色1.2 类图 2. 代码示例2.1 设计2.2 代码2.3 类图 1 概念 责任链(Chain of Responsibility)是指将客户端请求处理的不同职责对象组成请求处理链。 客户端只需要将请求交付到该链上,而不需要关心链上含有哪些对象。请求…...
![](https://img-blog.csdnimg.cn/9c004d29752c4ed3aa03117fda615a61.png)
环境变量【使用命令行参数引出环境变量】
前提:命令行参数 大家在写C/C程序的时候肯定见过下面这种情况: main函数里面携带的参数,平常写代码过程中很少用到这两个参数,接下来我们就研究一下 我们也不知道 指针数组argv里面到底保存的是什么,也不知道这个a…...
![](https://img-blog.csdnimg.cn/ee6246a97e76456ea2a96231b3fde401.png)
【Java 进阶篇】JavaScript BOM History 详解
当用户浏览网页时,可以使用JavaScript的BOM (Browser Object Model)中的History对象来访问浏览器的历史记录。这个对象允许您在不更改页面的情况下导航到不同的历史记录项,或者查看有关用户访问过的页面的信息。 在本篇博客中,我们将围绕Jav…...
![](https://img-blog.csdnimg.cn/e8d88ea3d6ae4ea8af86359785258466.png)
【计算机网络】https协议
文章目录 1 :peach:基本概念:peach:1.1 :apple:什么是HTTPS?:apple:1.2 :apple:什么是加密?:apple:1.3 :apple:常见的加密方式:apple:1.3.1 :lemon:对称加密:lemon:1.3.2 :lemon:⾮对称加密:lemon: 1.4 :lemon:数据指纹:lemon: 2 :peach:HTTPS的⼯作过程…...
![](https://img-blog.csdnimg.cn/9fe035533f174b828ded7fb672e45dfe.png)
React之受控组件和非受控组件以及高阶组件
一、受控组件 受控组件,简单来讲,就是受我们控制的组件,组件的状态全程响应外部数据 举个简单的例子: class TestComponent extends React.Component {constructor (props) {super(props);this.state { username: lindaidai }…...
![](https://img-blog.csdnimg.cn/img_convert/6f9cee7e33cc1064306fe6a0994a7a9e.jpeg)
中国移动集采120万部,助推国产5G赶超iPhone15
近期媒体纷纷传出消息指中国移动将大规模集采,预计将采购国产5G手机120万台,加上另外两家运营商的集采数量,估计集采数量可能达到300万部,如此将有助于它在国内高端手机市场赶超苹果。 国产5G手机在8月底突然上市,获益…...
![](https://img-blog.csdnimg.cn/e1ab2811ca2d45a79a5f71674cde12ff.png)
华为云HECS服务器下docker可视化(portainer)
一、docker安装 华为云HECS安装docker-CSDN博客 二、portainer安装 portainer地址:Portainer: Docker and Kubernetes Management Platform 当前portainer分CE(开源版) 和 BE(商业版),用CE即可 1 创建…...
![](https://img-blog.csdnimg.cn/e5ade96bd11149ed8c8fe2b90bbd4faa.png)
postman发送soap报文示例
一、soap简介 soap是一种基于XML的协议 二、postman发送soap请求 1、发送post请求,url: https://www.dataaccess.com/webservicesserver/NumberConversion.wso 2、headers设置,添加Content-Type,值为text/xml 添加SOAP…...
![](https://img-blog.csdnimg.cn/6832125cb64b446baeab040939f0ae62.png)
力扣-python-两数之和
题解: class Solution(object):def twoSum(self, nums, target):# 遍历列表for i in range(len(nums)):# 计算需要找到的下一个目标数字res target-nums[i]# 遍历剩下的元素,查找是否存在该数字if res in nums[i1:]:# 若存在,返回答案。这里…...
![](https://img-blog.csdnimg.cn/18b6f18730bf4f5dbf764bc405a1aea6.jpeg)
算水质TDS加温度补偿
先上图,就图里这款水质检测,用树莓派3/4的话,要配个温度检测作为温度校正,以及一个adc 元器件。我选ds18b20和ads1115。 再把模拟数据计算过程放一下: 温度检测元器件在农历钟那里提过,就是同款。此处先测个…...
![](https://img-blog.csdnimg.cn/f403fd9986e2451593e1149d640d1252.png)
wps/word 如何让表格的标题和表格名称文本(表1-1 xxx)跨页显示(已解决)
第一步: 打开wps 创建一个跨页的表格表格,如下图 第二步 大家都知道 表格标题跨页 就是1)在菜单表格工具 点击重复标题 或者 2)表格属性--》行--》在各页顶端以标题行形式出现,详细如下图。 1) 第一…...
![](https://img-blog.csdnimg.cn/a24e92fcc20647688d7799a8a6c8fb0a.png)
攻防世界web篇-PHP2
直接点击进入到http网页中,会得到这样一个界面 这里,我最开始使用了burp什么包也没有抓到,然后接着又用nikto进行探测,得到的只有两个目录,当时两个目录打开后,一个是fond界面,一个是这个网页的…...
![](https://www.ngui.cc/images/no-images.jpg)
Kotlin中的步长
步长是 Kotlin 中用于迭代区间或集合时控制迭代步进的概念。在 Kotlin 中,我们可以使用 step 关键字来指定迭代时的步长。 在 Kotlin 中,有多种方式可以定义一个区间(Range)。我们将通过以下示例代码来展示不同类型的区间以及如何…...
![](https://www.ngui.cc/images/no-images.jpg)
3. 无重复字符的最长子串
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2: 输入: s "bbbbb" 输出: 1 解释: 因为无…...
![](https://img-blog.csdnimg.cn/9343cdd5e65840d8b5eab73380cc8c56.png#pic_center)
通过SPI传输BMI160数据到nrf528xx
目录 主控和外设之间的联系关键示例可能的bug 主控和外设之间的联系 在完成代码之前,我们手里会有两份代码,一份是nrf528xx的SDK,一份是BMI160传感器的SDK,怎么利用SDK完成我们的需求呢?首先我们要搞明白,…...
![](https://img-blog.csdnimg.cn/bb00b8ed20ef41a49c701e88b990d84c.png)
MAYA教程之建模基础命令介绍
基础命令 视图相关操作 旋转视图 : ALT 鼠标左键平移视图 : ALT 鼠标中键缩放视图 : 滚动鼠标滚轮 或者 ALT 鼠标右键切换视图 : 空格键回到模型 : F 视图状态 选择状态 : Q移动状态 : W旋转状态 : E缩放状态 : R 视图显示 正常显示 : 1正常圆滑同时显示 : 2圆滑显示 …...
![](https://img-blog.csdnimg.cn/cfa9123d8e29495ab2f92c6b08261989.png)
文档外发控制与安全:实现高效协作与数据安全的关键
随着企业数据量的不断增加,文档外发成为了一个不可避免的需求。然而,很多企业在文档外发过程中存在着很多问题,如数据泄露、信息误用等。因此,如何保证文档外发的安全性和高效性成为了企业亟待解决的问题。飞驰云联Ftrans的文件收…...
![](https://img-blog.csdnimg.cn/f46209fae92848fda741ad495470d74f.jpeg)
在线课堂知识系统源码系统+前端+后端完整搭建教程
大家好啊,今天罗峰来给大家分享一款在线课堂知识系统源码系统。这款系统的功能十分强大。可以使用手机随时随地地学习,有专业的导师答疑解惑。支持视频,音频,图文章节。以下是部分核心代码图: 系统特色功能一览&#x…...
![](https://img-blog.csdnimg.cn/2793eecd970d4cd09afd08c9339fda11.png)
CSS之布局系列--顶部导航栏二级菜单居中展示
原文网址:CSS之布局系列--顶部导航栏二级菜单居中展示_IT利刃出鞘的博客-CSDN博客 简介 本文介绍CSS将顶部导航栏居中展示并支持二级菜单下拉展示的方法。 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-…...
![](/images/no-images.jpg)
佛山门户网站建设/品牌宣传推广文案
layer.load()只在火狐浏览器中正常展示,其他浏览器中都不展示。最后发现是ajax设为同步导致的,当ajax为同步时,js会停止渲染导致load弹框失效,解决方法是将ajax设为异步...
西安有哪些做网站的公司/深圳网络公司推广平台
上文(https://mp.csdn.net/editor/html/115607641)我们用实例讲解了如何利用.m文件实现对simulink系统的动态仿真,实例中有一句代码为: [t1,x1,y1]sim(new,10) 该语句中x1,y1均为空数组,其表示什么含义呢?…...
![](/images/no-images.jpg)
山东东营疫情最新消息/网站排名优化外包公司
我们平时用printf函数打印整数,用的是%d。你可能会问:整型是int(英文单词integer的缩写),为什么整型的格式说明符不是%i?这是因为计算机中对整数的表达,会很关注整数是用二进制、八进制、十进制还是十六进制的形式来表…...
![](https://img-blog.csdnimg.cn/2022010618485518335.png)
注册网站需要多久/南宁网站推广营销
默认占用:64M的内存 修改内存的方式: 1、某一类,右键选择--Run Configurations 2、选择--Arguments 3、在VM argments中输入内容,如:-Xmx80m 转载于:https://www.cnblogs.com/danyuzhu11/p/6180681.html...
![](/images/no-images.jpg)
做ppt的背景图片网站/网络营销案例100例
二叉树的镜像 class Solution { public:TreeNode* mirrorTree(TreeNode* root) {if(root nullptr) return nullptr;swap(root->left,root->right);mirrorTree(root->left);mirrorTree(root->right);return root;} };...
![](/images/no-images.jpg)
顺德网站开发/西安百度seo推广电话
OpenCV中常见的与图像操作有关的数据容器有Mat,cvMat和IplImage。 一、Mat类型:矩阵类型,Matrix。 在openCV中,Mat是一个多维的密集数据数组。可以用来处理向量和矩阵、图像、直方图等等常见的多维数据。 Mat有3个重要的方法&…...