STM32学习笔记

2023-11-09

STM32笔记

ADC

ADC(Analog-Digital Converter) 模拟-数字转换器

ADC可以将引脚上连续变化的电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁

12为逐次逼近型ADC,1us转换时间

输入电压范围03.3V,转换结果范围:04095

18个输入通道,可测量16个外部和2个内部信号源(内部温度传感器和内部供电检测)

规则组合注入组两个转换单元

模拟看门狗自动检测输入电压范围

TIM定时器

TIM(定时器)

定时器可以对输入的时钟进行计数,并在计数值打到设定值时触发中断

不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发等多种功能

定时器模式:向上计数、向下计数、中央对齐模式

定时中断基本结构

在这里插入图片描述

代码配置

void TIM_DeInit(TIM_TypeDef* TIMx);
void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);// 配置时基单元
void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState);// 运行控制使能
void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState);// 使能中断输出控制
void TIM_InternalClockConfig(TIM_TypeDef* TIMx);// 选择内部时钟
void TIM_ITRxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource);// 选择ITRx其它定时器的时钟
void TIM_TIxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_TIxExternalCLKSource,
                                uint16_t TIM_ICPolarity, uint16_t ICFilter);// 选择TIX
void TIM_ETRClockMode1Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,
                             uint16_t ExtTRGFilter);// 选择ETR1通道   TIM_ExtTRGPolarity:极性   ExtTRGFilter:滤波
void TIM_ETRClockMode2Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, 
                             uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter);
void TIM_ETRConfig(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,
                   uint16_t ExtTRGFilter);// 单独用来配置ETR引脚的 极性、滤波器等参数
void TIM_PrescalerConfig(TIM_TypeDef* TIMx, uint16_t Prescaler, uint16_t TIM_PSCReloadMode);// 修改预分频值
void TIM_CounterModeConfig(TIM_TypeDef* TIMx, uint16_t TIM_CounterMode); // 改变计数器模式
void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState); // 计数器预装功能使能失能
void TIM_SetCounter(TIM_TypeDef* TIMx, uint16_t Counter); // 设置当前计数器的值

PWM

OC(Output Compare)输出比较

输出比较可以通过比较CNT与CCR寄存器值得关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形

每个高级定时器和通用定时器都拥有4个输出比较通道

高级定时器的前三个通道额外拥有死区生成和互补输出的功能

PWM初始化

在这里插入图片描述

  • RCC开启时钟

    // 配置输出比较模块(重要)
    void TIM_OC1Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
    void TIM_OC2Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
    void TIM_OC3Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
    void TIM_OC4Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
    // 配置强制输出模式
    void TIM_ForcedOC1Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction);
    void TIM_ForcedOC2Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction);
    void TIM_ForcedOC3Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction);
    void TIM_ForcedOC4Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction);
    // 配置预装值(了解)
    void TIM_OC1PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);
    void TIM_OC2PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);
    void TIM_OC3PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);
    void TIM_OC4PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);
    // 配置快速使能(了解)
    void TIM_OC1FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast);
    void TIM_OC2FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast);
    void TIM_OC3FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast);
    void TIM_OC4FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast);
    // 在功能手册,外部事件清楚REF信号有介绍(了解)
    void TIM_ClearOC1Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear);
    void TIM_ClearOC2Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear);
    void TIM_ClearOC3Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear);
    void TIM_ClearOC4Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear);
    // 单独设置输出极性
    void TIM_OC1PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity);
    void TIM_OC1NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity);
    void TIM_OC2PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity);
    void TIM_OC2NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity);
    void TIM_OC3PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity);
    void TIM_OC3NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity);
    void TIM_OC4PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity);
    // 单独设置修改输出使能参数
    void TIM_CCxCmd(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_CCx);
    void TIM_CCxNCmd(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_CCxN);
    // 选择输出比较模式,单独更改输出比较模式
    void TIM_SelectOCxM(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_OCMode);
    // 单独更改CCR寄存器值得函数(重要),运行时更改占空比要用到
    void TIM_SetCompare1(TIM_TypeDef* TIMx, uint16_t Compare1);
    void TIM_SetCompare2(TIM_TypeDef* TIMx, uint16_t Compare2);
    void TIM_SetCompare3(TIM_TypeDef* TIMx, uint16_t Compare3);
    void TIM_SetCompare4(TIM_TypeDef* TIMx, uint16_t Compare4);
    
  • 配置时基单元

	
	// 配置时基单元
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
	TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;				// 时钟分频,分频滤波用
	TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;		// 定时器模式:向上,向下,三种中央对齐
	// 这里对72M进行7200分频,得到的是10K的计数频率,在10K的频率计10000个数即为1ms
	TIM_TimeBaseInitStruct.TIM_Period = 100 - 1;									// ARR自动重装器的值
	TIM_TimeBaseInitStruct.TIM_Prescaler = 72 - 1;								// PSC预分频器的值
	TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0;								// 重复计数器的值,高级定时器用到
	TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStruct);
	
  • 配置输出比较单元

	TIM_OCInitTypeDef TIM_OCInitStructure;
	TIM_OCStructInit(&TIM_OCInitStructure);
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;									// 输出比较模式
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;					// 输出极性
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;			// 
	TIM_OCInitStructure.TIM_Pulse = 50;																// CCR
	TIM_OC1Init(TIM2,&TIM_OCInitStructure);

  • 配置GPIO
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	
	// 配置GPIO
	GPIO_InitTypeDef GPIO_InitStruct;
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_Init(GPIOA,&GPIO_InitStruct);

  • 运行控制

  • RCC开启时钟

    定时器的基准时钟和整个外设的工作时钟就都会打开

  • 选择时基单元

  • 配置时基单元

    包含预分频器、自动重装器、计数器

  • 配置输出中断控制,允许更新中断输出到NVIC

  • 配置NVIC

  • 运行控制

EXTI外部中断

中断:在主程序运行过程中,出现了特定的中断出发条件(中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成后又回到原来被暂停的位置继续运行

中断优先级:有多个中断源同时申请中断时,CPU根据中断的轻重缓急进行裁决,优先相应更加紧急的中断源

中断嵌套:当一个中断程序正在运行时,又有新的更高优先级的中断源申请中断,CPU再次暂停当前中断程序,转而去处理新的中断程序,处理完成后依次进行返回(及把中断程序二次中断)

stm32中断

  • 68个可屏蔽中断通道,包含EXTI、TIM、ADC、USART、SPI、I2C、RTC等多个外设
  • 使用NVIC统一管理中断,每个中断通道都拥有16个可编程的优先级,可对优先级进行分组,进一步设置抢占优先级和响应优先级。

NVIC基本结构

NVIC(嵌套中断向量控制器),在STM32中用来统一分配和管理中断的,NVIC是一个内核外设,CPU的小助手。

  • NVIC存在意义,解决了哪些问题

如果把所有的中断都接到CPU上,CPU就需要引出很多线进行适配,并且如果许多中断同事申请,或者中断产生了拥堵,CPU也会很难处理(CPU主要运算)

在这里插入图片描述

EXIT简介

EXIT(外部中断)

EXTI可以检测指定GPIO口的电平,当其指定的GPIO产生电平变化,EXTI立即想NVIC发出中断申请,经过NVIC裁决后即可中断CPU主程序,使CPU知性EXTI对应的中断程序

支持的出发方式:上升沿、下降沿、双边沿、软件触发

支持的GPIO口:所有,但是相同的PIN不能同时触发中断(PA0\PB0\PC0不能同时触发)原因是在GPIO接入EXTI前有一个AFIO(中断引脚选择)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lSyB68m7-1650965283161)(C:\Users\deda_cqf\AppData\Roaming\Typora\typora-user-images\image-20220426171629905.png)]在这里插入图片描述

通道数:16个GPIO_Pin,外加PVD输出、RTC闹钟、USB唤醒、以太网唤醒

触发响应方式:中断响应、事件响应(若触发事件、则中断响应不会通向CPU,而是通向其它外设,用于触发其它外设的操作,例如ADC转换)

代码配置

  • 配置RCC

  • 配置GPIO

    选择端口为输入模式

  • 配置AFIO

    选择使用的gpio,连接到后面的Exti

  • 配置EXTI

    选择边沿触发方式,选择触发响应方式(触发响应,中断响应)

  • 配置NVIC

​ 选择合适的优先级

	// 配置时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
	
	// 配置GPIO
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB,&GPIO_InitStructure);
	
	// 配置AFIO,中断引脚选择
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource0);
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource1);
	
	// 配置EXTI
	EXTI_InitTypeDef EXTI_InitStructure;
	EXTI_InitStructure.EXTI_Line = EXTI_Line0 | EXTI_Line1;
	EXTI_InitStructure.EXTI_LineCmd = ENABLE;
	EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
	EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
	EXTI_Init(&EXTI_InitStructure);
	
	// 配置NVIC
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	NVIC_InitTypeDef NVIC_InitStructure;
	NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
	NVIC_Init(&NVIC_InitStructure);
	
	NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
	NVIC_Init(&NVIC_InitStructure);

GPIO输出

GPIO(general purpose input output)通用输入输出

引脚电平:0V ~ 3.3V,部分引脚可容忍5V

输出模式下可控制端口输出高低电平,控制LED、蜂鸣器、模拟通信协议输出时序等

输入模式下可读取端口的额高低电平活电压,用于按键读取、外界模块电平信号输入、ADC电压猜忌、模拟通信协议接收数据等

单独操作输出数据寄存器的某一位的方法

  • &=和|=操作,比较麻烦效率不高
  • 操作位设置\清除寄存器,
  • 读写"位带"区域,在stm32中,专门分配的一段地址区域,这段地址区域映射了RAM和外设寄存器的所有的位,操作相应的地址就相当于操作某一位

GPIO8种模式

(1) 浮空输入 GPIO_Mode_IN_FLOATING
(2) 带上拉输入 GPIO_Mode_IPU
(3) 带下拉输入 GPIO_Mode_IPD
(4) 模拟输入 GPIO_Mode_AIN
(5) 开漏输出 GPIO_Mode_Out_OD
(6) 开漏复用输出 GPIO_Mode_AF_OD
(7) 推挽输出 GPIO_Mode_Out_PP
(8) 推挽复用输出 GPIO_Mode_AF_PP

代码操作

  • 使用RCC开启GPIO的时钟
  • 使用GPIO_Init函数初始化GPIO
  • 使用输入输出函数控制GPIO
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStruct;
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_1;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_Init(GPIOA,&GPIO_InitStruct);
	
	GPIO_SetBits(GPIOA, GPIO_Pin_1 | GPIO_Pin_2);
RCC常用函数
// 外设使能或失能
void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);
GPIO常用函数
// GPIO复位
void GPIO_DeInit(GPIO_TypeDef* GPIOx);
void GPIO_AFIODeInit(void);
// GPIO初始化
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct);
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);

typedef struct
{
  uint16_t GPIO_Pin;             /*!< Specifies the GPIO pins to be configured.
                                      This parameter can be any value of @ref GPIO_pins_define */

  GPIOSpeed_TypeDef GPIO_Speed;  /*!< Specifies the speed for the selected pins.
                                      This parameter can be a value of @ref GPIOSpeed_TypeDef */

  GPIOMode_TypeDef GPIO_Mode;    /*!< Specifies the operating mode for the selected pins.
                                      This parameter can be a value of @ref GPIOMode_TypeDef */
}GPIO_InitTypeDef;


推挽开漏

推挽输出高低电平均有驱动能力

开漏高电平相当于高阻态,没有驱动能力,低电平有驱动能力

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

STM32学习笔记 的相关文章

  • Qt 疑云解答

    一 qt的mianwindow处不能布局 我们在mainwindow中添加2个控件 pushButton和pushButton 2 QWidget centerWindow new QWidget this this is point to
  • Hashmap扩容方法机制原理

    Hashmap扩容方法 机制原理 1 7版本 数组额定容量为16 元素数量超过负载因子 一般为0 75 后会扩容至原有数组大小 2 遍历老数组每个位置上的链表每个元素 取每个元素的key根据链表长度计算出在新数组中的下表 将元素添加到新数组
  • SylixOS下Redis编程实践

    1 Redis简介 Redis是一个完全开源的key value型数据库 其显著特点是基于内存操作 但是可以持久化到磁盘 相比较其他的数据库 Redis有着明显的优势 响应速度快和特性丰富是其明显的特点 其他的特点这里不一一赘述 Redis
  • pytorch 的 dataset 中使用 onnxruntime

    如果在 dataset 中预处理图像时 用到了 onnxruntime 的 cudaep 出现这样的错误 1 2022 12 13 13 53 01 554864883 E onnxruntime Default cuda call cc
  • Vuepress 导航栏与侧边栏配置详解

    目录 一 目录结构 二 导航栏配置 三 侧边栏配置 四 效果图 图 1 图 2 图 3 图 4 一 目录结构 这是我创建的 vuepress 站点 可参考 https blog csdn net sinat 31213021 article

随机推荐

  • windows下如何安装git以及IDEA如何配置git

    一 安装git git官方下载地址Git Downloads 目前最新的版本是2 15 0 1 1 首先 双击安装包 打开安装界面 然后点击Next下一步 1 2 配置git的安装组件 默认就行 继续点击Next下一步 默认勾选的内容有 创
  • http实现文件分片下载

    文章目录 检测是否支持 HTTP Range 语法 Range请求cURL示例 单一范围 多重范围 条件式分片请求 Range分片请求的响应 文件整体下载 文件分片下载 文本下载 图片下载 封装下载方法 HTTP分片异步下载是一种下载文件的
  • GBDT&GBRT与XGBoost

    在看清华学霸版 Python大战机器学习 的过程中 集成学习章节中出现了两个新的名词 GBDT GBRT 也许是西瓜书定位于全面 而没有拘泥于细节 后来科普发现 这两个东西和陈天奇大神的XGBoost紧密相连 于是估摸着花时间弄懂这两个东西
  • 【算法日志】动态规划刷题:股票买卖附加问题(day42)

    代码随想录刷题60Day 目录 前言 含冷冻期的股票买卖最佳时期 含手续费的股票买卖最佳时期 前言 今天的股票买卖问题会附加一些条件 但总体难度不大 含冷冻期的股票买卖最佳时期 该问题难点在于对几个状态进行解构并写出相应的状态转移方程 in
  • 安卓各文件存储路径汇总(Android file path)

    写下来 省得以后不记得到处翻 Environment getDataDirectory data Environment getDownloadCacheDirectory cache Environment getExternalStor
  • 2017 ICM/MCM Problem E: Sustainable Cities Needed!

    题目理解可持续发展的城市 任务 References 题目理解 可持续发展的城市 许多社区正在实施智能增长计划 以考虑长期 可持续的规划目标 聪明的成长是关于帮助每个城镇和城市变成更加经济繁荣 社会公平和环境可持续的生活地方的意思 2 智能
  • STM32使用HAL库输出连续可调的PWM信号

    项目中要控制一个步进电机控制器 因为涉及到加减速过程 需要频率任意可变 总体思路是先初始化PWM定时器输出 之后直接修改ARR和PSC寄存器 初始化代码如下 函 数 名 bsp SetTIMOutPWM 功能说明 设置引脚输出的PWM信号的
  • PHP正则采集示例 sscanf

    sscanf从一个格式化字符串中读取输入 功能跟正则类似 输出结果 Age 25 Name John Gender male 正则三段论 定
  • Mycat+Mysql分布式架构改造和性能压力测试

    架构实现 Mycat作为数据库高可用中间件具备很多的功能 如负载均衡 分库分表 读写分离 故障迁移等 结合项目的实际情况 分库分表功能对于关联查询有很高的要求 需要从业务角度考虑分库分表后的关联查询SQL的分析 业务代码动作较大 所以在此方
  • 记一次线上fullgc排查历程

    在公司一次重大项目中 生产环境突然发生频繁fullgc问题 通过cat发出警告 很不幸 这次项目非常重要 领导很看重 所以得赶紧解决问题 下面就是排查的艰苦历程 22 10 线上可以报警 出现fullgc问题 初步判断是服务器少了 于是申请
  • 2023最新版IntelliJ IDEA安装教程(非常详细)从零基础入门到精通,看完这一篇就够了

    IDEA的使用 IDEA的简单介绍 IDEA的主要优势 IDEA的卸载 IDEA的安装 第一个程序 HelloWorld 结束语 IDEA的简单介绍 IDEA全称IntelliJ IDEA 是Java语言对的集成开发环境 IDEA在业界被认
  • ajax无法获取null,Ajax未捕获TypeError:无法读取属性'点击'null

    我无法找出错误的原因 我不断收到Uncaught TypeError Cannot read property click of null错误 我确实在按钮中定义了 product btn类 Ajax未捕获TypeError 无法读取属性
  • 甲骨文 CleanCache 将从 Linux 内核中清除;GNU Parallel 20 周年;Openfire 4.6.7 发布

    整理 宋彤彤 责编 屠敏 开源吞噬世界的趋势下 借助开源软件 基于开源协议 任何人都可以得到项目的源代码 加以学习 修改 甚至是重新分发 关注 开源日报 一文速览国内外今日的开源大事件吧 一分钟速览新闻点 甲骨文研发的 CleanCache
  • java 常见的异常错误代码

    java异常错误代码 1 应当谨慎地使用那些只有HTTP1 1支持的状态代码 因为许多浏览器还只能够支持HTTP1 0 如果你使用了 HTTP1 1特有的状态代码 最好能够检查一下请求的HTTP版本号 状态代码 状态信息 含义 2 100错
  • Java 中有哪些类型的流?

    Java 中的流 Stream 分为两种类型 字节流和字符流 字节流 Byte Stream 字节流可以处理任何类型的数据 但是它们是以字节为单位进行操作的 Java 中提供了两种字节流 InputStream 和 OutputStream
  • 区块链学习路线图!

    分享关于区块链的学习的大致方向和路线
  • [519]matplotlib(二)

    3D 散点图绘制 scatter from mpl toolkits mplot3d import Axes3D import numpy as np from matplotlib import pyplot as plt 生成3D示例数
  • 虚拟化技术基础汇总(特全,初学者值得一看)

    虚拟化意味着应用程序可以使用一个资源 而不必担心它驻留在哪里 技术接口是什么 它是如何实现的 它使用的平台以及它有多少可用 里克 F 范德兰斯 目录 一 什么是虚拟化 1 虚拟化概念 2 虚拟化的类型 服务器虚拟化 网络虚拟化 桌面虚拟化
  • Pandas--DataFrame修改值

    pandas要修改值先需要了解DataFrame的一些知识 此处参照的是pandas的官方文档 When setting values in a pandas object care must be taken to avoid what
  • STM32学习笔记

    STM32笔记 STM32笔记 ADC TIM定时器 定时中断基本结构 代码配置 PWM PWM初始化 EXTI外部中断 NVIC基本结构 EXIT简介 代码配置 GPIO输出 单独操作输出数据寄存器的某一位的方法 GPIO8种模式 代码操