STM32F407ZGT6定时器(学习笔记一)

        定时器STM32非常重要的外设,也是比较复杂的外设,下面以STM32F407ZGT6为例记录学习内容:(1)基本定时功能(2)PWM输出功能(3)PWM互补死区、多通道移相输出、刹车(4)输入捕获之计算方波时长(5)输入捕获之编码器。分别使用通用定时器高级定时器进行外设配置,使用库函数寄存器的配置方式。

一、STM32F407ZGT6的定时器基本知识

        STM32F407ZG共有14个定时器。2个高级定时器(TIM1和TIM8),10个通用定时器(TIM2、TIM3、TIM4、TIM5、TIM9、TIM10、TIM11、TIM12、TIM13、TIM14),2个基本定时器(TIM6、TIM7);

        如上图所示,STM32F407ZGT6的定时器分为三种:高级定时器(TIM1和TIM8)、通用定时器(TIME2~TIME5TIM9~TIM14 基本定时器(TIM6和TIM7)。这几种定时器在功能上是有区分的,总体的性能排序:高级定时器>>通用定时器>>基本定时器

APB2总线:TIM1、TIM8~TIM11

APB1总线:TIM2~TIM7、TIM12~TIM14

        STM32F407ZGT6的系统时钟频率配置为168MHz的时候,基本的时钟树如下图所示,从下图中可以观察出APB1和APB2总线上的时钟是不一样的。

APB2总线时钟:168MHz

APB1总线时钟:84MHz

        对于定时器来讲,挂载的时钟总线的时钟频率是非常重要的。进行定时器配置的时候,定时的时间是需要根据总线时钟进行配置的。

STM32内部重要总线地址:

        APB1:0x40000000(Peripheral memory map)

        APB2:0x40010000(Peripheral memory map)

        AHB1:0x40020000(Peripheral memory map)

        AHB2:0x50000000(Peripheral memory map)

二、基本定时器功能

        定时器的基本定时功能是比较简单的。所有类的TIMx定时器都可以实现。下面以通用定时器3为例进行讲解。

2.1、通用定时器基本知识点介绍

通用 TIMx 定时器具有以下特性:
● 16 位( TIM3 TIM4 )或 32 位( TIM2 TIM5 ) 递增、递减和递增 / 递减自动重载计
数器。
● 16 位可编程预分频器,用于对计数器时钟频率进行分频 (即运行时修改),分频系数介
1 65536 之间。
● 多达 4 个独立通道 ,可用于:
         — 输入捕获
        — 输出比较
        — PWM 生成(边沿和中心对齐模式)
        — 单脉冲模式输出
● 使用外部信号控制定时器且可实现多个定时器互连的同步电路。
● 发生如下事件时生成中断/DMA 请求:
         — 更新:计数器上溢/下溢、计数器初始化(通过软件或内部/外部触发)
        — 触发事件(计数器启动、停止、初始化或通过内部/外部触发计数)
        — 输入捕获
        — 输出比较
● 支持定位用 增量(正交)编码器和霍尔传感器电路
外部时钟触发输入或逐周期电流管理

        下图所示的是通用定时器的内部连接图,本章通用定时的基本定时功能基本没有使用到下面的内部连接图,后面其他的配置需要使用到,所以下图是非常重要的。

时基单元
        可编程定时器的主要模块由一个 16 位/32 位计数器 及其相关的自动重装寄存器组成。此计数
器可采用递增方式计数。计数器的时钟可通过预分频器进行分频。
计数器、自动重载寄存器和预分频器寄存器可通过软件进行读写。即使在计数器运行时也可
执行读写操作。
时基单元包括:
        ● 计数器寄存器 (TIMx_CNT)
        ● 预分频器寄存器 (TIMx_PSC)
        ● 自动重载寄存器 (TIMx_ARR)
时钟选择
计数器时钟可由下列时钟源提供:
        ● 内部时钟 (CK_INT)
        ● 外部时钟模式 1 :外部输入引脚 (TIx)
        ● 外部时钟模式 2 :外部触发输入 (ETR) ,仅适用于 TIM2 TIM3 TIM4
        ● 内部触发输入 (ITRx) :使用一个定时器作为另一个定时器的预分频器,例如可以将定时
器配置为定时器 2 的预分频器。

2.1、通用定时器的寄存器介绍

        基本定时器的寄存器如下图所示,不同的模式配置使用到的寄存器不一样,本次通用定时器的基本定时功能只需要使用到:(1)控制寄存器 1 [TIMx_CR1],(2)TIMx 预分频器 [TIMx_PSC],(3)自动重载寄存器 [TIMx_ARR],(4)DMA/中断使能寄存器 [TIMx_DIER]

2.1.1、控制寄存器 1 [TIMx_CR1]

          

        控制寄存器TIMx_CR1的相关配置主要是定时器的基本配置。

2.1.2、TIMx 预分频器 [TIMx_PSC]

        本寄存器主要是是对定时器的计数频率进行分频之后,在将其放进定时器的计数器的寄存器CNT中。

2.1.3、自动重载寄存器 [TIMx_ARR]

        定时器的计数值配置,计数值超过这个值之后就会从新装载寄存器从新开始计数。

2.1.4、DMA/中断使能寄存器 [TIMx_DIER]

        

        此寄存器的配置,主要是中断和DMA的配置。

2.2、通用定时器的寄存器配置

        (1)使能TIM3时钟。

        (2)设置计数值。

        (3)设置预分频值。

        (4)使能更新中断。

        (5)定时器的CR1寄存器配置(可以直接使用默认值)。

        (6)定时器使能。

        (7)中断的优先级配置、内核中断使能、中断分组配置等。

下面是配置代码,高级定时器、通用定时器、基本定时器的配置都是一样的。

        但是STM32内部的基本定时器只能完成基本定时的功能,以及某些事件的触发,所以只使用定时器功能时候,最好使用基本定时器(TIM6、TIM7).

//定时器3中断服务程序	 
void TIM3_IRQHandler(void)
{ 		    		  			    if(TIM3->SR&0X0001)  //溢出中断{LED1=!LED1;			    				   				     	    	}				   TIM3->SR&=~(1<<0);  //清除中断标志位 	    
}//通用定时器3中断初始化
//这里时钟选择为APB1的2倍,而APB1为42M
//arr:自动重装值。
//psc:时钟预分频数
//定时器溢出时间计算方法:Tout=((arr+1)*(psc+1))/Ft us.
//Ft=定时器工作频率,单位:Mhz
//这里使用的是定时器3!
void TIM3_Int_Init(u16 arr,u16 psc)
{RCC->APB1ENR|=1<<1;	 //TIM3时钟使能    TIM3->ARR=arr;  	   //设定计数器自动重装值 TIM3->PSC=psc;  	   //预分频器	  TIM3->CR1 |= 1<<7;   //ARPE使能,自动重装载使能(可以不设置也会自动重装载,应该是ARR设置了就使能了)TIM3->DIER|=1<<0;    //允许更新中断	  TIM3->CR1|=0x01;     //使能定时器3MY_NVIC_Init(1,3,TIM3_IRQn,2);	//抢占1,子优先级3,组2									 
}

2.3、基础定时器

        基本定时器 TIM6 TIM7 包含一个 16 位自动重载计数器,该计数器由可编程预分频器驱动。 此类定时器不仅可用作通用定时器以生成时基,还可以专门用于驱动数模转换器 (DAC) 。实
际上,此类定时器内部连接到 DAC 并能够通过其触发输出驱动 DAC 。 这些定时器彼此完全独立,不共享任何资源。
基础定时器(TIM6 TIM7)的特性包括:
● 16 位自动重载递增计数器
● 16 位可编程预分频器,用于对计数器时钟频率进行分频(即运行时修改),分频系数
介于 1 65536 之间
● 用于触发 DAC 的同步电路
● 发生如下更新事件时会生成中断/DMA 请求:计数器上溢

下图是基础定时器的内部连接图:

下面是基础定时器的寄存器:

        基础定时使用代码的配置与上面介绍的定时器3的配置是一样的。

2.4、定时器的定时时间分析

 2.4.1、APB1总线上定时器的定时时间分析

        根据上面STM32Cubemx的配置图可知APB1总线的时钟频率为84MHz,TIM2~TIM7、TIM12~TIM14等非高级定时器挂载在APB1总线上。

        如上图所示的,定时器的定时和计数的配置,主要有预分频器的分频值、预装载计数器的装载值。

        (1)预分频器的分频值PSC:84MHz / PSC = A1(Hz)

        (2)预装载计数器的装载值ARR:ARR * (1 / A1) = tim(s)

        上面的A1就是“CNT计数器”的计数的时钟频率,也即是A1频率的脉冲跳动一次,就计数一次,此时计数一次的时间就是频率的倒数(1/A1)单位秒s,预装载计数器的装载值ARR就是记录的次数,乘以前面计数一次的时间,就是tim计时总时间,单位秒s。

 2.4.2、APB2总线上定时器的定时时间分析

         根据上面STM32Cubemx的配置图可知APB2总线的时钟频率为168MHz,TIM1、TIM8~TIM11等定时器挂载在APB2总线上。

        定时的时间和上面分析的一样,就是将“84MHz”换成“168MHz”就可以了。

        (1)预分频器的分频值PSC:168MHz / PSC = A1(Hz)

        (2)预装载计数器的装载值ARR:ARR * (1 / A1) = tim(s)

三、PWM输出功能

        STM32的PWM输出是外部调节的一个重要方式,STM32F407ZGT6的高级定时器和通用定时器是可以产生PWM输出,基础定时是不可以产生PWM输出的,下面最基础的PWM输出采用通用定时器实现介绍。

        通用寄存器的基础知识在第二章中已经介绍过一些,这里不重复。下面只介绍与PWM相关的知识。

3.1、通用定时器TIM2到TIM5的PWM知识

        下图是STM32内部连接图,比较重要,从图中可以看出通用定时器TIM2到TIM5的外部输出的PWM通道有四个,可以同时产生4路PWM脉冲。下面将根据下图展开叙述定时器的PWM输出。

       TIM2到TIM5的PWM输出的配置也是需要定时的定时的基础配置,然后是PWM模式和通道的配置。定时器的计数模式的配置前面已经描述。

        注意:这里计数器的内部自动计数模式还是外部触发的计数模式的配置的选择。如上图所示,如果对“捕获/比较x寄存器”进行配置了之后,定时器的模式就会有下面三种。

【1】捕获/比较x寄存器未配置

        (1)定时器内部自动计数。

【2】捕获/比较x寄存器配置(需要各自配置)

        (1)定时器的计数由外部脉冲触发计数,对外部脉冲计数。

        (2)定时器内部自己进行计数,然后外部触发产生中断进行标记。

           TIM2到TIM5的PWM输出需要配置的寄存器有:(1)捕获/比较模式寄存器 1 (TIMx_CCMR1)(2)捕获/比较使能寄存器 (TIMx_CCER)(3)捕获/比较寄存器 1 (TIMx_CCR1)

3.1.1、TIMx定时的配置

        配置与前面相同,最简单的配置就是只配置预分频值与计数值就可以,其他的都使用默认配置。

3.1.2、捕获/比较模式寄存器 1 (TIMx_CCMR1)

        定时器的“CCMR1”寄存器是配置PWM模型输出通道的,如下图所示的,将对应的GPIO复用到这个CHx接口上之后,就可以对这个通道OCx进行配置。

该寄存器配置的主要有以下部分:

(1)配置通道OCx为输出模式,也就是PWM比较模式,PWM 模式 1和PWM 模式 2(B1)

(2)使能通道OCx(A1)

(3)配置通道OCx预装载使能(A1)

3.1.3、捕获/比较使能寄存器 (TIMx_CCER)

        上面是“CCER”寄存器的“捕获/比较寄存器”的配置,三个为一组“CC1E”、“CC1P”、“CC1NP”,在PWM输出配置的时候只需要用到“CC1E”、“CC1P”两个位就可以了。

(1)“CC1E”:使能CCxL输出到OCx

(2)“CC1P”:设置输出的有效电平

        定时器的“CCER”寄存器是对“捕获/比较x寄存器”的配置,也就是上图中的“CCxL”输出到“OCx”的配置

3.1.4、捕获/比较寄存器 1 (TIMx_CCR1)

        “CCR1”是PWM波占空比设置的寄存器,只需要改变定时器中的“CCR1”的值就可以改变PWM波的占空比,下面会详细介绍。

3.1.4、PWM波形占空比的配置

        影响PWM波形的输出的主要有下面的三个因素:

(1)定时器的预分频值和重装载值。

        定时器的预分频值与重装载值是定时器产生的波形。

(2)定时的计数模式,上升、下降、双边沿。

        这里设置的也是定时器产生的波形。

(3)捕获比较寄存器CCR1的值的设置。

        占空比 = CCR1 / arr

(4)CHx通道的PWM模式

        PWM模式1:在递增计数模式下,只要 TIMx_CNT<TIMx_CCR1,通道 1 便为有

效状态,否则为无效状态。在递减计数模式下,只要 TIMx_CNT>TIMx_CCR1 ,通道 1 便为
无效状态 (OC1REF=0) ,否则为有效状态 (OC1REF=1)

        PWM模式2:在递增计数模式下,只要 TIMx_CNT<TIMx_CCR1,通道 1 便为无

效状态,否则为有效状态。在递减计数模式下,只要 TIMx_CNT>TIMx_CCR1 ,通道 1 便为
有效状态,否则为无效状态。

        这里通过CCR1的值与定时器的CNT(定时器的计数值)值进行比较之后,比CNT值小的时候输出有效值,比CNT值大的时候输出无效值。

        下面是针对上面三种配置的不同波形展示:

(1)定时器为上升沿,重装载值为arr,输出比较值为CCR1,高电平有效。

(2)定时器为下降沿,重装载值为arr,输出比较值为CCR1,高电平有效。

(3)定时器为双边沿,重装载值为arr,输出比较值为CCR1,高电平有效。

3.2、TIM2到TIM5的配置流程和代码

3.2.1、PWM输出配置流程

        (1)使能定时器时钟

        (2)使能对应GPIO时钟

        (3)配置GPIO为复用推挽输出,上拉输出

        (4)配置GPIO的复用模式寄存器

        (5)设置定时器的自动重装载值

        (6)设置定时器预分频器不分频

        (7)定时器其他配置可以直接使用默认值CR1寄存器的配置

        (8)设置CHx通道的PWM模式

        (9)设置CHx通道的预装载使能,CCR1寄存器的值预装载

        (10)输出比较寄存器OCx的输出使能

        (11)定时器的ARPE,自动重装载值使能

        (12)使能定时器。

3.2.2、PWM输出配置代码

void TIM2_PWM_Init(u32 arr,u32 psc)
{		 					 //此部分需手动修改IO口设置RCC->APB1ENR|=1<<0; 	//TIM2时钟使能    RCC->AHB1ENR|=1<<0;   	//使能PORTA时钟	GPIO_Set(GPIOA,PIN0,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU);//复用功能,上拉输出GPIO_AF_Set(GPIOA,0,1);	//PF9,AF9 TIM2->ARR=arr;			//设定计数器自动重装值 TIM2->PSC=psc;			//预分频器不分频 TIM2->CCMR1&=~(uint16_t)(3<<0);  	//CH1 PWM1模式		 TIM2->CCMR1 |= 1<<3; 	//CH1 预装载使能TIM2->CCMR1 |= 7<<4;   //PWM2模式TIM2->CCER |= 1<<0;   	//OC1 输出使能	TIM2->CCER |= 1<<1;   	//OC1 低电平有效	   TIM2->CCR1 |= 100;   //比较寄存器值TIM2->CR1 |= 1<<7;   	//ARPE使能 TIM2->CR1 |= 1<<0;    	//使能定时器14 											  
}  

        下面是GPIOA0口输出的PWM波形。

3.2、通用定时器TIM9到TIM14的PWM知识

        通用定时器TIM9到TIM14定时器与通用定时器TIM2到TIM5的配置几乎相同,不同的就是通道的数量不同,TIM9到TIM14定时器的输入和输出通道只有两个,所以在配置“通道”和“捕捉/比较x寄存器”的时候就需要注意

3.3、通用定时器TIM9到TIM14的代码配置

        下面是TIM14的配置代码,与上面的TIM2配置完全一样。

//TIM14 PWM部分初始化 
//PWM输出初始化
//arr:自动重装值
//psc:时钟预分频数
void TIM14_PWM_Init(u32 arr,u32 psc)
{		 					 //此部分需手动修改IO口设置RCC->APB1ENR|=1<<8; 	//TIM14时钟使能    RCC->AHB1ENR|=1<<5;   	//使能PORTF时钟	GPIO_Set(GPIOF,PIN9,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU);//复用功能,上拉输出GPIO_AF_Set(GPIOF,9,9);	//PF9,AF9 TIM14->ARR=arr;			//设定计数器自动重装值 TIM14->PSC=psc;			//预分频器不分频 TIM14->CCMR1|=6<<4;  	//CH1 PWM1模式		 TIM14->CCMR1|=1<<3; 	//CH1 预装载使能	   TIM14->CCER|=1<<0;   	//OC1 输出使能	TIM14->CCER|=1<<1;   	//OC1 低电平有效	   TIM14->CCR1 = 100;  //比较寄存器值TIM14->CR1|=1<<7;   	//ARPE使能 TIM14->CR1|=1<<0;    	//使能定时器14 											  
}  

四、PWM死区互补输出、移相输出、刹车

        多通道的移相输出是高级定时器和通用定时器都可以实现的;PWM的死区互补输出只有高级定时器可以实现。下面以高级定时器1对移相输出、死区互补输出的配置进行讲解。

4.1、高级定时器的基础知识(STM32F407ZGT6)

TIM1 TIM8 定时器具有以下特性:
● 16 位递增、递减、递增 / 递减自动重载计数器。
● 16 位可编程预分频器,用于对计数器时钟频率进行分频(即运行时修改),分频系数
介于 1 65536 之间。
● 多达 4 个独立通道,可用于:
        — 输入捕获
        — 输出比较
        — PWM 生成(边沿和中心对齐模式)
        — 单脉冲模式输出
● 带 可编程死区的互补输出
● 使用外部信号控制定时器且可实现 多个定时器互连的同步电路
● 重复计数器,用于仅在给定数目的计数器周期后更新定时器寄存器。
● 用于将定时器的输出信号置于复位状态或已知状态的断路输入。
● 发生如下事件时生成中断/DMA 请求:
        — 更新:计数器上溢/下溢、计数器初始化(通过软件或内部/外部触发)
        — 触发事件(计数器启动、停止、初始化或通过内部/外部触发计数)
        — 输入捕获
        — 输出比较
        — 断路输入
● 支持定位用 增量(正交)编码器和霍尔传感器电路。
● 外部时钟触发输入或逐周期电流管理。
        下图是高级定时器的内部连接图,这个图是非常重要的,后面也将以此图展开阐述寄存器的配置。图中输入端口有5个,输出端口有7个。也就可以有4路输入检测,7路PWM波输出,一路PWM输出刹车检测。

时基单元
        可编程高级控制定时器的主要模块是一个 16 位计数器及其相关的自动重载寄存器。计数
器可递增计数、递减计数或交替进行递增和递减计数。计数器的时钟可通过预分频器进行
分频。
        计数器、自动重载寄存器和预分频器寄存器可通过软件进行读写。即使在计数器运行时也可
执行读写操作。
时基单元包括:
        ● 计数器寄存器 (TIMx_CNT)
        ● 预分频器寄存器 (TIMx_PSC)
        ● 自动重载寄存器 (TIMx_ARR)
        ● 重复计数器寄存器 (TIMx_RCR)

        注意:这里的重复计数器寄存器是为了弥补自动重载寄存器的值不够大的问题。当定时计数器计数值达到自动重载寄存器值得时候,会产生溢出,这时候重复计数器寄存器中得值减一,直到技术到重复计数器寄存器中的值减为零的时候,计数器计数才算结束。

时钟选择
计数器时钟可由下列时钟源提供:
        ● 内部时钟 (CK_INT)
        ● 外部时钟模式 1:外部输入引脚
        ● 外部时钟模式 2:外部触发输入 ETR
        ● 外部触发输入 (ITRx):使用一个定时器作为另一定时器的预分频器,例如,可将定时器
1 配置为定时器 2 的预分频器。
内部时钟源 (CK_INT)
        如果禁止从模式控制器 (SMS=000) ,则 CEN 位、 DIR 位( TIMx_CR1 寄存器中)和 UG
TIMx_EGR 寄存器中)为实际控制位,并且只能通过软件进行更改( UG 除外,仍保持自
动清零)。当对 CEN 位写入 1 时,预分频器的时钟就由内部时钟 CK_INT 提供。

4.1.2、死区、移相、刹车介绍

        

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

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

相关文章

代数结构与图论

文章目录 图的基本概念欧拉图与哈密顿图树平面图代数系统群与环格与布尔代数 图的基本概念 图的阶&#xff1a;图中的顶点数 &#xff0c;n 个顶点被称为 n 阶图零图&#xff1a;一条边都没有 平凡图&#xff1a;一阶零图基图&#xff1a;将有向图的各条有向边改成无向边所得到…

javascript 常见事件

简介&#xff1a; JavaScript&#xff08;简称“JS”&#xff09;是一种具有函数优先的轻量级&#xff0c;解释型或即时编译型的编程语言。虽然它是作为开发Web页面的脚本语言而出名&#xff0c;但是它也被用到了很多非浏览器环境中&#xff0c;JavaScript基于原型编程、多范式…

python+django超市进销存仓库管理系统s5264

本次设计任务是要设计一个超市进销存系统&#xff0c;通过这个系统能够满足超市进销存系统的管理及员工的超市进销存管理功能。系统的主要功能包括&#xff1a;首页、个人中心、员工管理、客户管理、供应商管理、承运商管理、仓库信息管理、商品类别管理、由管理员和员工&#…

C. Load Balancing 一个序列同时加一个数和减一个数,直到最大和最小之间相差最大为1(结论可记住)

题目&#xff1a; https://atcoder.jp/contests/abc313/tasks/abc313_c 思想&#xff1a;1.给定一个固定的B&#xff0c;求使A等于B所需的最小运算次数 2.在所有最大值和最小值最多相差1的B中&#xff0c;找出一个所需的运算次数最少的&#xff0c;即1 做法&#xff1a;构造…

python dash call_back 多output 7

效果 代码 # 导入Dash库及其相关组件&#xff0c;用于构建交互式Web应用 from dash import Dash, dcc, html, Input, Output, callback# 定义一个外部样式表&#xff0c;用于美化应用界面 external_stylesheets [https://codepen.io/chriddyp/pen/bWLwgP.css]# 创建一个D…

互联网加竞赛 基于Django与深度学习的股票预测系统

文章目录 0 前言1 课题背景2 实现效果3 Django框架4 数据整理5 模型准备和训练6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于Django与深度学习的股票预测系统 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff…

php学习05-常量

常量可以理解为值不变的量。常量值被定义后&#xff0c;在脚本的其他任何地方都不能改变。一个常量由英文字母、下划线和数字组成&#xff0c;但数字不能作为首字母出现。 在PHP中使用define()函数来定义常量&#xff0c;该函数的语法格式如下&#xff1a; define(string cons…

【双十一特辑】爱心代码(程序员的浪漫)-李峋

前言 最近《点燃我温暖你》中李峋的爱心代码超级火&#xff0c;看着特别心动&#xff0c;这不&#xff0c;光棍节快到了&#xff0c;给兄弟们教学一波爱心代码&#xff0c;赶在双十一前表白&#xff0c;让这个双十一不在是孤单一个人&#xff01; 目录 前言 C语言简易爱心代码…

[大厂实践] Chick-fil-A的服务API流程实践

本文介绍了美国快餐连锁巨头Chick-fil-A在技术团队中引入Buf和Connect解耦API依赖并实现了良好的API定义模式。原文: Connect(ing) Chick-fil-A 背景 2018年&#xff0c;Chick-fil-A的客户技术团队遇到了一些API问题。该团队擅长构建API&#xff0c;这些API可以实现一些了不起的…

【Spring实战】13 Security+Thymeleaf自定义登录页面

文章目录 1. 执行流程2. 为什么要自定义登录页面3. 创建登录页面4. 配置 Spring Security5. 创建请求 API6. 启动服务7. 验证8. 代码详细总结 Spring Security 是一个强大的身份验证和访问控制框架&#xff0c;而 Thymeleaf 是一个用于构建动态 Web 页面的强大模板引擎。结合它…

django基础学习

django基础学习 文章目录 django基础学习django框架urls.py将请求发送到正确的视图views.py处理请求models.py定义数据模型根据models查询数据HTML模板呈现数据 Django项目结构创建虚拟环境下载django创建站点创建应用settings.py项目设置 通用类别视图会话框架身份验证视图使用…

python+django校园篮球论坛交流系统v5re9

本课题使用Python语言进行开发。基于web,代码层面的操作主要在PyCharm中进行&#xff0c;将系统所使用到的表以及数据存储到MySQL数据库中 技术栈 系统权限按管理员和用户这两类涉及用户划分。 (a) 管理员&#xff1b;管理员使用本系统涉到的功能主要有&#xff1a;首页、个人中…

【docker实战】安装tomcat并连接mysql数据库

本节用docker来安装tomcat&#xff0c;并用这个tomcat连接我们上一节安装好的mysql数据库 一、拉取镜像 [rootlocalhost data]# docker pull tomcat:8.5.69二、运行tomcat bitnami的tomcat的根目录在/opt/bitnami/tomcat/webapps下面&#xff0c;所以我们为了方便部署我们的…

【http】缓存协议

✨ 专栏介绍 在当今互联网时代&#xff0c;计算机网络已经成为了人们生活和工作中不可或缺的一部分。而要实现计算机之间的通信和数据传输&#xff0c;就需要依靠各种网络协议来进行规范和约束。无论是浏览网页、发送电子邮件还是进行在线交流&#xff0c;都离不开各种各样的网…

【owt-server】一些构建项目梳理

【owt-server】清理日志&#xff1a;owt、srs、ffmpeg 【owt】p2p client mfc 工程梳理【m98】webrtc vs2017构建带符号的debug库【OWT】梳理构建的webrtc和owt mfc工程 m79的mfc客户端及owt-client

【MySQL变更】gh-ost原理解读

gh-ost简介 gh-ost是处理MySQL在线表结构变更的工具&#xff0c;与pt-osc 不同&#xff0c;gh-ost不会使用触发器。 gh-ost 可以进行测试&#xff0c;暂停&#xff0c;动态控制和重新配置&#xff0c;审计还有其他许多操作perks。 命名 最初它被命名为gh-osc&#xff1a;Git…

C语言课程设计参考题目

一、工资管理系统 需求分析 工资信息存放在文件中&#xff0c;提供文件的输入、输出等操作&#xff1b;要实现浏览功能&#xff0c;提供显示、排序操作&#xff1b;而查询功能要求实现查找操作&#xff1b;另外还应该提供键盘式选择菜单以实现功能选择。 2、总体设计 整个系统可…

虚拟化技术和云计算的关系

1、云计算底层就是虚拟化技术。 &#xff08;1&#xff09;常见的虚拟化技术&#xff1a;VMware&#xff08;闭源的&#xff0c;需要收费&#xff09;、XEN、KVM &#xff08;2&#xff09;大部分公司用的虚拟化方案&#xff1a;XEN、KVM 2、虚拟化的历史 &#xff08;1&am…

redhat 8 安装openstack

redhat 8 安装openstack 1、安装文档2、redhat 8 安装openstack3、使用openstack 1、安装文档 openstack官方安装文档 https://docs.openstack.org/install-guide/ 2、redhat 8 安装openstack 3、使用openstack

华为hcia之ipv6实验手册

R3: dhcp enable ipv6 dhcpv6 pool test address prefix 2000:23::/64 excluded-address 2000:23::2 dns-server 2000:23::2 interface GigabitEthernet0/0/0 ipv6 enable ipv6 address 2000:12::2/64 ipv6 address auto link-local undo ipv6 nd ra halt //无状态配置 inter…