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

串口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.rhkb.cn/news/158645.html

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

相关文章

挖机技术哪家强

挖机技术哪家强,中国山东找蓝翔,开挖机是我曾经的梦想,每个男人心中都有一台自己的挖机,近半年做的项目就是关于挖机销售CRM&ERP系统, 今天我们聊聊关于挖机的基本知识。 注:此文并非广告,…

Mybatis学习笔记注解/xml映射/动态SQL%%%Mybatis教程

介绍 Mybatis 是一款优秀的持久层框架,用于简化 JDBC 的开发 MyBatis中文网 Mybatis 入门 快速入门 步骤 创建 SpringBoot 工程、数据库表 user、实体类 User引入 Mybatis 相关依赖,配置 Mybatis(数据库连接信息)编写 SQL 语…

金x软件有限公司安全测试岗位面试

目录 一、自我介绍 二、你是网络空间安全专业的,那你介绍下网络空间安全这块主要学习的东西? 三、本科专业是网络工程,在嘉兴海视嘉安智城科技有限公司实习过,你能说下干的工作吗?(没想到问的是本科实习…

二十四、【参考素描三大面和五大调】

文章目录 三种色面(黑白灰)五种色调 这个可以参考素描对物体受光的理解:素描调子的基本规律与素描三大面五大调物体的明暗规律 三种色面(黑白灰) 如下图所示,我们可以看到光源是从亮面所对应的方向射过来的,所以我们去分析图形的时候,首先要…

【算法练习Day19】二叉搜索树的最近公共祖先二叉搜索树中的插入操作删除二叉搜索树中的节点

​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:练题 🎯长路漫漫浩浩,万事皆有期待 文章目录 二叉搜索树的最近公共祖先叉…

vue七牛云视频直传

完成后样式&#xff1a; 下面的代码是我自己项目里面用到的&#xff0c;一些判断看自己情况去掉&#xff0c;用的是element-ui组件 安装 uuid 库。你可以使用 npm 或 yarn 来完成安装。在终端中执行以下命令&#xff1a; npm install uuidhtml部分 <el-upload class&quo…

Google zxing 生成带logo的二维码图片

环境准备 开发环境 JDK 1.8SpringBoot2.2.1Maven 3.2 开发工具 IntelliJ IDEAsmartGitNavicat15 添加maven配置 <dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.4.0</version> </…

2023年09月 C/C++(七级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C编程&#xff08;1~8级&#xff09;全部真题・点这里 Python编程&#xff08;1~6级&#xff09;全部真题・点这里 第1题&#xff1a;红与黑 有一间长方形的房子&#xff0c;地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上&#xff0c;只能向相邻的黑色…

新式茶饮品牌如何写出生活感软文

居民消费水平的提升使新式茶饮品牌的市场不断扩张&#xff0c;在竞争激烈的茶饮市场中&#xff0c;品牌提高知名度的主要方式之一就是软文营销&#xff0c;而生活感软文是茶饮软文中较为常见的类型&#xff0c;它能有效拉进品牌与消费者之间的距离&#xff0c;那么新式茶饮品牌…

24字符串-kmp寻找重复子串

目录 字符串匹配——kmp算法 LeetCode之路——459. 重复的子字符串 分析&#xff1a; 字符串匹配——kmp算法 强烈建议参考Carl的讲解&#xff1a; 视频讲解版&#xff1a;帮你把KMP算法学个通透&#xff01;&#xff08;理论篇&#xff09;(opens new window) 视频讲解版&…

近地面无人机植被定量遥感与生理参数反演

目录 专题一 近十年近地面无人机植被遥感文献分析、传感器选择、观测方式及质量控制要点 专题二 辐射度量与地物反射特性 专题三 无人机遥感影像辐射与几何处理 专题四 光在植被叶片与冠层中的辐射传输机理及平面模型应用 专题五 植被覆盖度与叶面积指数遥感估算 更多应用…

【开源】给ChatGLM写个,Java对接的SDK

作者&#xff1a;小傅哥 - 百度搜 小傅哥bugstack 博客&#xff1a;bugstack.cn 沉淀、分享、成长&#xff0c;让自己和他人都能有所收获&#xff01;&#x1f604; 大家好&#xff0c;我是技术UP主小傅哥。 清华大学计算机系的超大规模训练模型 ChatGLM-130B 使用效果非常牛&…

「网络编程」网络层协议_ IP协议学习_及深入理解

「前言」文章内容是网络层的IP协议讲解。 「归属专栏」网络编程 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 一、IP协议简介二、IP协议报头三、IP网段划分&#xff08;子网划分&#xff09;四、特殊的IP地址五、IP地址的数量限制六、私有IP地址和公网IP地址七、路由八、分…

【Python】Python语言基础(中)

第十章 Python的数据类型 基本数据类型 数字 整数 整数就是整数 浮点数 在编程中&#xff0c;小数都称之为浮点数 浮点数的精度问题 print(0.1 0.2) --------------- 0.30000000000000004 ​​1.可以通过round()函数来控制小数点后位数 round(a b)&#xff0c;则表示…

spring6使用启用Log4j2日志框架

文章目录 Log4j2日志概述1. 引入Log4j2依赖2. 加入日志配置文件3. 测试 Log4j2日志概述 在项目开发中&#xff0c;日志十分的重要&#xff0c;不管是记录运行情况还是定位线上问题&#xff0c;都离不开对日志的分析。日志记录了系统行为的时间、地点、状态等相关信息&#xff…

[Python小项目] 从桌面壁纸到AI绘画

从桌面壁纸到AI绘画 一、前言 1.1 确认问题 由于生活和工作需要&#xff0c;小编要长时间的使用电脑&#xff0c;小编又懒&#xff0c;一个主题用半年的那种&#xff0c;所以桌面壁纸也是处于常年不更换的状态。即时改变主题也是在微软自带的壁纸中选择&#xff0c;而这些自…

LaTeX 公式与表格绘制技巧

LaTeX 公式与绘图技巧公式基本可以分为 单一公式单一编号单一公式按行编号单一公式多个子编号单一公式部分子编号分段公式现在给出各自的代码单一公式单一编号 公式1&#xff1a;equationaligned\begin{equation}\begin{aligned}a&bc\\b&a2\\c&b-3\end{aligned}\en…

如何使用前端包管理器(如npm、Yarn)?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

c# xml 参数读取的复杂使用

完整使用2 生产厂家里面包含很多规格型号,一个规格型号里面包含很多出厂序列号,点击下一步如果检测到填充的和保存的不一样 就新增一条(如检测到生产厂家相同,但是规格型号不同,就新增一组规格型号)。 界面一:新增界面 界面2 删除界面 界面一:新增界面 load 其中…

spark读取hive表字段,区分大小写问题

背景 spark任务读取hive表&#xff0c;查询字段为小写&#xff0c;但Hive表字段为大写&#xff0c;无法读取数据 问题错误: 如何解决呢&#xff1f; In version 2.3 and earlier, when reading from a Parquet data source table, Spark always returns null for any column …