#智能车项目(三)串口初始化

串口1初始化

初始化串口1PA9 PA10
流程
1、声明结构体
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
USART_InitTypeDef USART_InitStructure;

2、打开时钟
// 打开串口GPIO的时钟
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA , ENABLE);
// 打开串口外设的时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
3、、GPIO初始化 复用上拉

GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1); 
GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1); 
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_9 ; 
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	//速度50MHz
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉
GPIO_Init(GPIOA,&GPIO_InitStructure); 

4、 中断优先级配置
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //抢占优先级0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //子优先级1
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能
NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器
5、串口功能配置
// 配置串口的工作参数
// 配置波特率
USART_InitStructure.USART_BaudRate = baudrate;
// 配置 针数据字长
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_Init(USART1, &USART_InitStructure);
6、开中断
//开启串口接收中断
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
// 使能串口
USART_Cmd(USART1, ENABLE);

// 完成TC状态位的清除,防止硬件复位重启之后, 第一个字节丢失
USART_ClearFlag(USART1, USART_FLAG_TC);
/*** @Brief: 初始化IO 串口1* @Note: * @Parm: baudrate:波特率* @Retval: */
void USART1_Init(uint32_t baudrate)
{GPIO_InitTypeDef GPIO_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;USART_InitTypeDef USART_InitStructure;// 打开串口GPIO的时钟RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA , ENABLE);// 打开串口外设的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1); GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_9 ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	//速度50MHzGPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉GPIO_Init(GPIOA,&GPIO_InitStructure); //Usart NVIC 配置NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //抢占优先级0NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;		  //子优先级1NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;			  //IRQ通道使能NVIC_Init(&NVIC_InitStructure);							  //根据指定的参数初始化VIC寄存器// 配置串口的工作参数// 配置波特率USART_InitStructure.USART_BaudRate = baudrate;// 配置 针数据字长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_Init(USART1, &USART_InitStructure);//开启串口接收中断USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);// 使能串口USART_Cmd(USART1, ENABLE);// 完成TC状态位的清除,防止硬件复位重启之后, 第一个字节丢失USART_ClearFlag(USART1, USART_FLAG_TC);#if ENABLE_USART1_DMAUSART1_DMA_Init();#endif
}

串口1DMA配置 这里没有用到

流程:
1、DMA初始化结构体声明
DMA_InitTypeDef DMA_InitStructure;
2、使能时钟
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE);
3、反初始化DMA2_Stream5 这里注意每个数据流对应着不同通道,故数据流通道共同决定外设的DMA
4、配置DMA初始化
通道
外设地址
内存地址
传输方向
发送长度
外设地址自增
内存地址地怎
外设数据宽度
内存数据宽度
DMA模式
DMA传送优先级(1)软件阶段 配置寄存器的DMA_SxCR寄存器的PL[1:0]位,可以设为从非常高到低的四挡;2)硬件阶段 软件配置相同时,优先级取决于硬件流的编号,编号越低越具有优先权。

DMA_InitStructure.DMA_Channel = DMA_Channel_4;
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)(&USART1->DR); // 外设地址
DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)g_dma_buff;		// 发送内存地址
DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;				// 外设为传送数据目的地,即发送数据
DMA_InitStructure.DMA_BufferSize = 0;								// 发送长度为0DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;		// 外设地址不增加
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;					// 内存地址自增1
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; // 外设数据宽度8bit
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;			// 内存数据宽度8bit
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;							// DMA_Mode_Normal(只传送一次), DMA_Mode_Circular (不停地传送)
DMA_InitStructure.DMA_Priority = DMA_Priority_High;						// (DMA传送优先级为高)
DMA_Init(DMA1_Stream5, &DMA_InitStructure);								// 初始化
static void USART1_DMA_Init(void)
{DMA_InitTypeDef DMA_InitStructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE);/* DMA2 Channel4 (triggered by USART1 Tx event) Config */DMA_DeInit(DMA2_Stream5);DMA_InitStructure.DMA_Channel=DMA_Channel_4;DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)(&USART1->DR);     // 外设地址DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)g_dma_buff;            // 发送内存地址DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;                      // 外设为传送数据目的地,即发送数据DMA_InitStructure.DMA_BufferSize = 0;                                   // 发送长度为0DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;        // 外设地址不增加DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;                 // 内存地址自增1DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; // 外设数据宽度8bitDMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;         // 内存数据宽度8bitDMA_InitStructure.DMA_Mode =  DMA_Mode_Normal;                          // DMA_Mode_Normal(只传送一次), DMA_Mode_Circular (不停地传送)DMA_InitStructure.DMA_Priority = DMA_Priority_High;                     // (DMA传送优先级为高)DMA_Init(DMA1_Stream5, &DMA_InitStructure);                            // 初始化// USART_ITConfig(USART1, USART_IT_TC, ENABLE);                            // 使能串口发送完成中断,需配置中断,否则影响开机USART_DMACmd(USART1, USART_DMAReq_Tx, ENABLE);                          // 使能DMA串口发送请求
}#endif

printf函数使用

/// 重定向c库函数printf到串口,重定向后可使用printf函数
int fputc(int ch, FILE *f)
{/* 发送一个字节数据到串口 */USART_SendData(DEBUG_USARTx, (uint8_t)ch);/* 等待发送完毕 */while (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_TXE) == RESET)/* 发送缓冲区为空时USART_FLAG_TXE=1  这句代表有数据发送中*/;return (ch);
}/// 重定向c库函数scanf到串口,重写向后可使用scanf、getchar等函数
int fgetc(FILE *f)
{/* 等待串口输入数据 */while (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_RXNE) == RESET)/* 接收数据寄存器非空 */;return (int)USART_ReceiveData(DEBUG_USARTx);
}

串口1发送数据

/*** @Brief: UART1发送数据* @Note:* @Parm: ch:待发送的数据* @Retval:*/
void USART1_Send_U8(uint8_t ch)
{while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);USART_SendData(USART1, ch);
}

串口1 中断处理函数


/*** @Brief: 串口1中断函数* @Note:* @Parm:* @Retval:*/
void USART1_IRQHandler(void)
{uint8_t Rx1_Temp = 0;if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET){// Rx1_Temp = USART1->DR; //(USART1->DR)/(USART_ReceiveData(USART1));  //读取接收到的数据Rx1_Temp = USART_ReceiveData(USART1);
#if PID_ASSISTANT_ENprotocol_data_recv(&Rx1_Temp, 1);
#elseUpper_Data_Receive(Rx1_Temp);
#endif}
}

串口二初始化

串口2PA2PA3 使用SBUS协议 波特率100000 9位数据位 2个停止位 偶校验
使用蓝牙时正常设置

void USART2_Init(uint32_t baudrate)
{GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;// 打开串口GPIO的时钟// 打开串口GPIO的时钟RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);// 打开串口外设的时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_USART3);GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_USART3);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;	  // 复用功能GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 速度50MHzGPIO_InitStructure.GPIO_OType = GPIO_OType_PP;	  // 推挽复用输出GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;	  // 上拉GPIO_Init(GPIOA, &GPIO_InitStructure);// Usart2 NVIC 配置NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; // 抢占优先级NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;		  // 子优先级NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;			  // IRQ通道使能NVIC_Init(&NVIC_InitStructure);							  // 根据指定的参数初始化NVIC寄存器// 配置串口的工作参数
#if ENABLE_SBUS// 配置波特率USART_InitStructure.USART_BaudRate = baudrate;// 配置 针数据字长,字长为9位数据格式,包含了1位校验位,8个数据位USART_InitStructure.USART_WordLength = USART_WordLength_9b;// 配置2个停止位USART_InitStructure.USART_StopBits = USART_StopBits_2;// 配置校验位:偶校验位USART_Parity_EvenUSART_InitStructure.USART_Parity = USART_Parity_Even;// 配置硬件流控制:无USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;// 配置工作模式,收发一起USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
#else// 配置波特率USART_InitStructure.USART_BaudRate = baudrate;// 配置 针数据字长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;
#endif// 完成串口的初始化配置USART_Init(USART2, &USART_InitStructure);// 开启串口接收中断USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);// 使能串口USART_Cmd(USART2, ENABLE);
}

串口3用于串行舵机控制

void USART3_Init(uint32_t baudrate)
{GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;// 打开串口GPIO的时钟RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);// 打开串口外设的时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);GPIO_PinAFConfig(GPIOB, GPIO_PinSource10, GPIO_AF_USART3);GPIO_PinAFConfig(GPIOB, GPIO_PinSource11, GPIO_AF_USART3);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;	  // 复用功能GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 速度50MHzGPIO_InitStructure.GPIO_OType = GPIO_OType_PP;	  // 推挽复用输出GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;	  // 上拉GPIO_Init(GPIOB, &GPIO_InitStructure);// Usart NVIC 配置NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; // 抢占优先级0NVIC_InitStructure.NVIC_IRQChannelSubPriority = 4;		  // 子优先级1NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;			  // IRQ通道使能NVIC_Init(&NVIC_InitStructure);							  // 根据指定的参数初始化VIC寄存器// 配置串口的工作参数// 配置波特率USART_InitStructure.USART_BaudRate = baudrate;// 配置 针数据字长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_Init(USART3, &USART_InitStructure);// 开启串口接受中断USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);// 使能串口USART_Cmd(USART3, ENABLE);
}

串口4、5用于wifi/zigbee数据通信

#if ENABLE_UART4
void UART4_Init(uint32_t baudrate)
{GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;// 打开串口GPIO的时钟RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);// 打开串口外设的时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, ENABLE);GPIO_PinAFConfig(GPIOC, GPIO_PinSource10, GPIO_AF_UART4);GPIO_PinAFConfig(GPIOC, GPIO_PinSource11, GPIO_AF_UART4);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;	  // 复用功能GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 速度50MHzGPIO_InitStructure.GPIO_OType = GPIO_OType_PP;	  // 推挽复用输出GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;	  // 上拉GPIO_Init(GPIOC, &GPIO_InitStructure);// 配置串口的工作参数// 配置波特率USART_InitStructure.USART_BaudRate = baudrate;// 配置 针数据字长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_Tx;// 完成串口的初始化配置USART_Init(UART4, &USART_InitStructure);// 使能串口USART_Cmd(UART4, ENABLE);USART_ClearFlag(UART4, USART_FLAG_TC);
}
#endif#if ENABLE_UART5
void UART5_Init(uint32_t baudrate)
{GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;// 打开串口GPIO的时钟RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);// 打开串口外设的时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART5, ENABLE);GPIO_PinAFConfig(GPIOC, GPIO_PinSource12, GPIO_AF_UART5);GPIO_PinAFConfig(GPIOD, GPIO_PinSource2, GPIO_AF_UART5);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;	  // 复用功能GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 速度50MHzGPIO_InitStructure.GPIO_OType = GPIO_OType_PP;	  // 推挽复用输出GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;	  // 上拉GPIO_Init(GPIOC, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;	  // 复用功能GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 速度50MHzGPIO_InitStructure.GPIO_OType = GPIO_OType_PP;	  // 推挽复用输出GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;	  // 上拉GPIO_Init(GPIOD, &GPIO_InitStructure);// 配置串口的工作参数// 配置波特率USART_InitStructure.USART_BaudRate = baudrate;// 配置 针数据字长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_Tx;// 完成串口的初始化配置USART_Init(UART5, &USART_InitStructure);// 使能串口USART_Cmd(UART5, ENABLE);USART_ClearFlag(UART5, USART_FLAG_TC);
}
#endif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/104982.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【angular】TodoList小项目(已开源)

参考:https://segmentfault.com/a/1190000013519099 文章目录 准备工作headerTodo、Doing、Done样式(HTMLCSS)功能(TS)将输入框内容加入todoList(addTodo)将todo事件改到doing 服务 参考开源后续…

9.Linear Maps

线性映射 线性映射是将向量作为输入并产生一些新向量作为输出的转换。 从坐标定义开始(数组),再到2,3,并展示它们是如何关联的 线性映射的坐标表示最终是矩阵, 1.坐标定义(数组) 列向量是向量的坐标表示…

uniapp小程序实现绘制内容,生成海报并保存截图(Painter和Canvas两种方式举例)

一、Painter方法 Painter插件传送门 1.下载资源包 2.将资源包的如下部分 3.使用页面引入组件 ui样式 <paintercustomStyle=margin-left: 40rpx; height: 1000rpx;palette="{{palette}}"bind:imgOK="onImgOK"/>data 中数据(绘制内容,替换区域) pai…

《动手学深度学习 Pytorch版》 8.3 语言模型和数据集

8.3.1 学习语言模型 依靠在 8.1 节中对序列模型的分析&#xff0c;可以在单词级别对文本数据进行词元化。基本概率规则如下&#xff1a; P ( x 1 , x 2 , … , x T ) ∏ t 1 T P ( x t ∣ x 1 , … , x t − 1 ) P(x_1,x_2,\dots,x_T)\prod^T_{t1}P(x_t|x_1,\dots,x_{t-1}) …

1.3 do...while实现1+...100 for实现1+...100

思路&#xff1a;两个变量&#xff0c;一个变量存储数据之和&#xff0c;一个变量实现自增就行 do...while int i, s;i 1;s 0;do{s 1;i;} while (i < 100);cout << s << endl; for int i, j0;for (i 1; i < 100; i){j 1;}cout << j << …

uniapp 运行到 app 报错 Cannot read property ‘nodeName‘ of null

uniapp 运行到某一个页面&#xff0c;报错&#xff0c;h5没有问题 Unhandled error during execution of scheduler flush. This is likely a Vue internals bug. Please open an issue at https://new-issue.vuejs.org/?repovuejs/coreat <GuiPagecustomHeadertruecustomF…

RabbitMQ概述原理

RabbitMQ是一种消息队列中间件&#xff0c;其主要作用是在应用程序之间传输数据。它基于AMQP&#xff08;高级消息队列协议&#xff09;实现&#xff0c;可以用于不同语言和不同操作系统之间的通信。 RabbitMQ的工作原理是生产者将消息发送到队列中&#xff0c;消费者从队列中接…

docker 安装oracle

拉取镜像 拉取oracle_11g镜像 拉取oracle镜像(oracle 11.0.2 64bit 企业版 实例名: helowin) Oracle主要在Docker基础上安装&#xff0c;安装环境注意空间和内存&#xff0c;Oracle是一个非常庞大的一个软件&#xff0c; 建议使用网易镜像或阿里镜像网站这里以oracle 11.0.2…

终端仿真软件连接交换机调试步骤

背景&#xff1a; 通过一台电脑&#xff0c;连接交换机的console口进行命令行调试&#xff1b; 需要用到终端仿真软件以图形界面显示交换机的命令&#xff1b; 本文以华为交换机和华为提供的终端仿真软件IPOP V4.02为例&#xff0c;其他仿真软件应该类似&#xff0c;可模仿。…

力扣-461.汉明距离

Method 1 直接比较x&#xff0c;y二进制中的每一位&#xff0c;如果不同则cnt加一&#xff0c;并且x&#xff0c;y每次右移一位 class Solution { public:int hammingDistance(int x, int y) {int cnt 0;while(x > 0 && y > 0) {if((x & 1) ! (y & 1)…

当涉及到API接口数据分析时,主要可以从以下几个方面展开

当涉及到API接口数据分析时&#xff0c;主要可以从以下几个方面展开&#xff1a; 请求分析&#xff1a;可以统计每个API接口的请求次数、请求成功率、失败率等基础指标。这些指标可以帮助你了解API接口的使用情况&#xff0c;比如哪个API接口被调用的次数最多&#xff0c;哪个…

“之江创客”跨境电商赛区决赛暨浙南新电商发展论坛圆满落幕

9月26日&#xff0c;由商务部中国国际电子商务中心指导&#xff0c;浙江省商务厅等十个部门主办&#xff0c;浙江省电子商务促进中心、温州市商务局、苍南县人民政府承办的“之江创客”2023全球电子商务创业创新大赛跨境电商赛区决赛暨浙南新电商发展论坛在苍南圆满落幕。浙江省…

用 Three.js 创建一个酷炫且真实的地球

接下来我会分步骤讲解&#xff0c;在线示例在数字孪生平台。 先添加一个球体 我们用threejs中的SphereGeometry来创建球体&#xff0c;给他贴一张地球纹理。 let earthGeo new THREE.SphereGeometry(10, 64, 64) let earthMat new THREE.MeshStandardMaterial({map: albed…

使用Python计算平面多边形间最短距离

要计算平面多边形间的最短距离&#xff0c;首先需要导入Excel表格中的多边形数据&#xff0c;然后使用GJK&#xff08;Gilbert-Johnson-Keerthi&#xff09;算法来判断两个多边形是否重叠。如果两个多边形不重叠&#xff0c;可以计算它们之间的最短距离。 以下是一个基本的Pyt…

结构体对齐规则

1.第一个成员在结构体变量偏移量为0的地址处。 2.其他成员变量对齐到某个数字(对齐数)的整数倍的地址处。(对齐数编译器默认的一个对齐数与该成员大小的较小值&#xff09;注意&#xff1a;目前有且只有VS编译器有默认为8. 3.结构体总大小为最大对齐数的整数倍。 4.如果嵌套…

常用的软件项目管理工具一览

软件项目管理工具是帮助团队成功管理和完成软件开发项目的软件程序和应用程序。根据项目及其规模和复杂性&#xff0c;可以使用各种各样的这些工具来协助完成任务&#xff0c;从任务跟踪和调度&#xff0c;到项目报告&#xff0c;到版本控制和协作。 项目经理对软件项目的整体成…

qgis c++ api 整体框架详解

文章目录 整体架构QGis库官方文档编译生成的库 core地图和图层矢量图层(Vector layers)图层要素符号图层要素要素渲染(feature renderer)符号(symbol) 坐标映射数据源(data provider) Raster layers图层符号数据源坐标映射 core库其他有用类 guiQgsMapCanvasQgsMapToolQgsLayer…

Android AMS——内存回收机制(十二)

在 Android 中,AMS(Activity Manager Service)负责管理应用程序的生命周期和资源分配。其中,AMS也包含了内存回收机制,用于释放系统中不再使用的内存资源,以保证系统的稳定性和性能。 一、内存回收简介 1、回收机制 Android AMS 的内存回收机制主要涉及以下几个方面:…

计算机视觉和机器视觉有什么区别?

人工智能是一个概念性术语&#xff0c;涵盖了若干特定技术。本文中&#xff0c;我们将探讨机器视觉&#xff08;MV&#xff09;和计算机视觉&#xff08;CV&#xff09;。二者都涉及可视化输入的摄取和解释&#xff0c;因此&#xff0c;了解这些重叠技术的优势、约束和最佳应用…

OpenHamony开发笔记一:在HarmonyOS虚拟机上运行openharmony工程

在HarmonyOS的虚拟机上要运行openharmony的工程时需要修改的地方有 1.修改build-profile.json5&#xff0c;将runtimeOS改为HarmonyOS "targets": [{"name": "default","runtimeOS": "HarmonyOS"}, 2.修改工程引用的SDK&a…