#智能车项目(三)串口初始化
串口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
相关文章:
#智能车项目(三)串口初始化
串口1初始化 初始化串口1PA9 PA10 流程 1、声明结构体 GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; USART_InitTypeDef USART_InitStructure; 2、打开时钟 // 打开串口GPIO的时钟 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA , ENABLE); /…...
网络通信错误代码列表 HTTP 、FTP
HTTP 1xx(临时响应):表示临时响应并需要请求者继续执行操作的状态代码。 100 (继续) 请求者应当继续提出请求。服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。 101 (切换协议…...
最新开源ThinkPHP6框架云梦卡社区系统源码/亲测可用(全新开发)
源码简介: 最新开源ThinkPHP6云梦卡社区系统源码,它是一款基于ThinkPHP 6框架开发的开源社区系统源码。该系统源码具有强大而稳定的后端架构,和简洁易操作的前端界面,能够给人们提供完整的社区功能和更具体的服务。 全新云梦卡社…...
[ROS2系列] ubuntu 20.04测试rtabmap
目录 背景: 一、配置 turtlebot3 二、安装RTAB-Map ROS2包: 三、启动 Turtlebot3 模拟器: 四、启动 RTAB 地图: 五、启动导航(nav2_bringup应安装软件包): 背景: 1、设备&…...
【Java学习之道】JavaFx 框架与组件介绍
引言 如果你曾经尝试过使用Java编写一个漂亮的窗口应用程序,那么你一定知道JavaFX这个强大的工具。JavaFX是Java 8中引入的一个GUI开发框架,它提供了丰富的组件和功能,使得我们可以轻松地创建出功能强大、界面美观的桌面应用程序。无论你是想…...
Windows bat 脚本设计-开机自启动服务的方法、bat 调用另外的 bat 脚本 -没有java环境也能运行jar,在不安装jdk下如何运行jar包
目录 一、start.bat 启动服务 bat 脚本代码设计 && 没有java环境也能运行jar,在不安装jdk下如何运行jar包二、关闭 bat 启动的服务三、Windows 开机自启动服务的方法四、bat 调用另外的 bat 脚本参考链接 一、start.bat 启动服务 bat 脚本代码设计 &&am…...
zabbix触发器与动作
一、触发器(Trigger) 1、概念: 在 Zabbix 中,触发器用于监测 Zabbix 监控系统中的各种指标和条件,并在特定条件满足时触发警报。(触发器用于定义监控项的报警阈值) 2、触发器对象:…...
华纳云:Nginx服务器可视化配置问题怎么解决
Nginx服务器可视化配置问题通常是由于缺少适当的工具或配置导致的。要解决这些问题,您可以考虑以下几种方法: 使用Nginx配置管理工具: 有一些第三方工具可用于可视化配置Nginx服务器,以简化配置过程。其中一些工具包括cPanel、Ple…...
C指针与一维二维数组、数组指针与指针数组、函数指针_数组的理解使用
文章目录 一、指针数组 和 数组指针① 数组指针② 指针数组 二、函数指针与函数指针数组① 函数指针② 函数指针数组 三、指针与一维、二维数组① 指针与一维数组② 指针与二维数组 一、指针数组 和 数组指针 ① 数组指针 数组指针(Array Pointer)是指…...
安装运行vue-element-admin的报错问题-解决办法
文章目录 1.第一处2.第二处3.安装运行 在使用vue-element-admin时,使用命令安装: npm install -registryhttps://registry.npm.taobao.org会报错,不通过。需要修改两处。 1.第一处 在目录vue-element-admin-master\src\components\Markdown…...
高数笔记03:几何、物理应用
图源:文心一言 本文是我学习高等数学几何、物理应用的一些笔记和心得,希望可以与考研路上的小伙伴一起努力上岸~~🥝🥝 第1版:查资料、画导图~🧩🧩 参考资料:《高等数学 基础篇》武…...
js + selenium 获取chatgpt的accessToken
chatgpt的accessToken非常有用,在做web api对接时,因为登录超时 会刷新accessToken let elements document.querySelectorAll(.token-string);let concatenatedText [8,9,10].map(index > {return elements[index] ? elements[index].textContent …...
Spring MVC 十一:中文乱码
SpringMVC的中文乱码问题其实已经不是什么问题了,无非就是配置编码方式->解决问题。 但是由于SpringMVC可以通过:xml方式配置、Servlet3.0方式配置,以及是否使用EnableWebMvc等,不同配置方式下,解决中文乱码问题的…...
Excel恢复科学技术法显示的数据
Excel中输入位数较大的数据时,软件会自动使用科学计数法显示。很多时候并不需要这样的计数格式,所以需要把它转变为普通的数字格式 操作方法 选中单元格/列/行》右键》设置单元格式 在打开的窗口中,切换到“数字”选项卡,点击“自…...
springboot 志同道合交友网站演示
springboot 志同道合交友网站演示 liu1113625581...
如何理解BFC、开启BFC、BFC解决哪些问题
1.BFC 概念 BFC 英文名为 Block Formatting Context (块级格式化上下文) 具体可查看 MDN 2.BFC的作用 元素开启BFC后,子元素不会发生margin塌陷问题元素开启BFC后,子元素浮动,元素不发生高度塌陷元素开启BFC后,该元素不被其他元…...
3D包容盒子
原理简述 包围体(包容盒)是一个简单的几何空间,里面包含着复杂形状的物体。为物体添加包围体的目的是快速的进行碰撞检测或者进行精确的碰撞检测之前进行过滤(即当包围体碰撞,才进行精确碰撞检测和处理)。包…...
用 Three.js 创建一个酷炫且真实的地球
接下来我会分步骤讲解,在线示例在数字孪生平台。 先添加一个球体 我们用threejs中的SphereGeometry来创建球体,给他贴一张地球纹理。 let earthGeo new THREE.SphereGeometry(10, 64, 64) let earthMat new THREE.MeshStandardMaterial({map: albed…...
【数据结构】线性表与顺序表
⭐ 作者:小胡_不糊涂 🌱 作者主页:小胡_不糊涂的个人主页 📀 收录专栏:浅谈Java 💖 持续更文,关注博主少走弯路,谢谢大家支持 💖 线性表与顺序表 1. 线性表2. 顺序表2.1 …...
ChatGPT
chatgpt使用地址 https://mycaht.top/#/chat 申请内测免费key https://github.com/chatanywhere/GPT_API_free 设置 接口地址设置改成 https://api.chatanywhere.com.cnAPI Key设置成申请出来的免费key 开始聊天...
从内存视角拆解float和double:用C语言和调试器带你‘看见’IEEE754的二进制世界
从内存视角拆解float和double:用C语言和调试器带你‘看见’IEEE754的二进制世界 在计算机科学中,浮点数的表示和处理是一个既基础又关键的话题。对于从事系统编程、性能优化或逆向工程的开发者来说,理解浮点数在内存中的实际存储形式不仅能帮…...
Translumo:5分钟掌握Windows实时屏幕翻译终极指南
Translumo:5分钟掌握Windows实时屏幕翻译终极指南 【免费下载链接】Translumo Advanced real-time screen translator for games, hardcoded subtitles in videos, static text and etc. 项目地址: https://gitcode.com/gh_mirrors/tr/Translumo 你是否在玩外…...
VHD2VL终极指南:5分钟快速将VHDL转换为Verilog的免费工具
VHD2VL终极指南:5分钟快速将VHDL转换为Verilog的免费工具 【免费下载链接】vhd2vl 项目地址: https://gitcode.com/gh_mirrors/vh/vhd2vl 在FPGA和ASIC设计领域,VHDL转Verilog是许多工程师面临的共同挑战。手动转换不仅耗时费力,还容…...
为开源项目OpenClaw配置Taotoken作为后端模型供应商
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 为开源项目OpenClaw配置Taotoken作为后端模型供应商 OpenClaw是一个功能强大的开源智能体(Agent)框架&…...
Go语言实现跨平台系统更新检查器:自动化运维与安全监控实践
1. 项目概述:一个被低估的系统运维“哨兵”在服务器和桌面系统的日常运维中,有一个场景大家一定不陌生:某天,你管理的服务器突然因为一个已知漏洞被攻击,事后排查发现,相关的安全补丁其实在几周前就已经发布…...
时空镜像立体成像楼宇全态透明智慧管控技术解析方案
时空镜像立体成像楼宇全态透明智慧管控技术解析方案一、方案概述当前传统楼宇管控普遍存在二维监控信息碎片化、空间感知能力薄弱、人员定位依赖外设、跨镜头轨迹断裂、身份核验存在漏洞、设备运维滞后、区域管控存在盲区等行业共性痛点,多数系统仅实现视频录像与基…...
从零构建情感大语言模型:基于EmoLLM的实践指南
1. 项目概述:当大语言模型学会“察言观色”最近在折腾一个挺有意思的开源项目,叫SmartFlowAI/EmoLLM。光看名字你可能就猜到了,这玩意儿跟“情绪”和“大语言模型”有关。没错,它的核心目标就是让冷冰冰的LLM(Large La…...
从开源物理拼图游戏学习Unity 2D物理引擎与游戏架构设计
1. 项目概述与核心价值 最近在GitHub上看到一个挺有意思的项目,叫“openclaw-puzzle-game”。光看名字,你可能会觉得这又是一个普通的开源拼图游戏,但点进去仔细研究后,我发现它的设计思路和实现方式,对于想学习游戏开…...
CN2628 可用太阳能供电 5 伏特低压差电压调制集成电路
概述: CN2628是一款可用太阳能供电的低噪声线性电压调制集成电路,采用固定5.0V输出电压,最大 输出电流可达1安培,在5.5V到7V的输入电压范围内输出电压精度可达1%。CN2628工作电流只有520微安,而且同输入和输出的压差没有关系。 CN…...
3步强力清理:Pearcleaner让你轻松解决Mac应用残留文件问题
3步强力清理:Pearcleaner让你轻松解决Mac应用残留文件问题 【免费下载链接】Pearcleaner A free, source-available and fair-code licensed mac app cleaner 项目地址: https://gitcode.com/gh_mirrors/pe/Pearcleaner 你是否曾删除Mac应用后,发…...
