#include "sys.h"
//////////////////////////////////////////////////////////////////////////////////
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//ALIENTEK STM32H7开发板
//系统时钟初始化
//包括时钟设置/中断管理/GPIO设置等
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//创建日期:2019/4/21
//版本:V1.0
//版权所有,盗版必究。
//Copyright(C) 广州市星翼电子科技有限公司 2014-2024
//All rights reserved
//********************************************************************************
//修改说明
//无
//////////////////////////////////////////////////////////////////////////////////
//设置向量表偏移地址
//NVIC_VectTab:基址
//Offset:偏移量
void MY_NVIC_SetVectorTable(u32 NVIC_VectTab,u32 Offset)
{
SCB->VTOR=NVIC_VectTab|(Offset&(u32)0xFFFFFE00);//设置NVIC的向量表偏移寄存器,VTOR低9位保留,即[8:0]保留。
}
//设置NVIC分组
//NVIC_Group:NVIC分组 0~4 总共5组
void MY_NVIC_PriorityGroupConfig(u8 NVIC_Group)
{
u32 temp,temp1;
temp1=(~NVIC_Group)&0x07;//取后三位
temp1<<=8;
temp=SCB->AIRCR; //读取先前的设置
temp&=0X0000F8FF; //清空先前分组
temp|=0X05FA0000; //写入钥匙
temp|=temp1;
SCB->AIRCR=temp; //设置分组
}
//设置NVIC
//NVIC_PreemptionPriority:抢占优先级
//NVIC_SubPriority :响应优先级
//NVIC_Channel :中断编号
//NVIC_Group :中断分组 0~4
//注意优先级不能超过设定的组的范围!否则会有意想不到的错误
//组划分:
//组0:0位抢占优先级,4位响应优先级
//组1:1位抢占优先级,3位响应优先级
//组2:2位抢占优先级,2位响应优先级
//组3:3位抢占优先级,1位响应优先级
//组4:4位抢占优先级,0位响应优先级
//NVIC_SubPriority和NVIC_PreemptionPriority的原则是,数值越小,越优先
void MY_NVIC_Init(u8 NVIC_PreemptionPriority,u8 NVIC_SubPriority,u8 NVIC_Channel,u8 NVIC_Group)
{
u32 temp;
MY_NVIC_PriorityGroupConfig(NVIC_Group);//设置分组
temp=NVIC_PreemptionPriority<<(4-NVIC_Group);
temp|=NVIC_SubPriority&(0x0f>>NVIC_Group);
temp&=0xf; //取低四位
NVIC->ISER[NVIC_Channel/32]|=1<<NVIC_Channel%32;//使能中断位(要清除的话,设置ICER对应位为1即可)
NVIC->IP[NVIC_Channel]|=temp<<4; //设置响应优先级和抢断优先级
}
//外部中断配置函数,只针对GPIOA~GPIOK
//参数:
//GPIOx:0~10,代表GPIOA~GPIOK
//BITx:0~15,代表IO引脚编号.
//TRIM:触发模式,1,下升沿;2,上降沿;3,任意电平触发
//该函数一次只能配置1个IO口,多个IO口,需多次调用
//该函数会自动开启对应中断,以及屏蔽线
void Ex_NVIC_Config(u8 GPIOx,u8 BITx,u8 TRIM)
{
u8 EXTOFFSET=(BITx%4)*4;
RCC->APB4ENR|=1<<1; //SYSCFGEN=1,使能SYSCFG时钟
SYSCFG->EXTICR[BITx/4]&=~(0x000F<<EXTOFFSET); //清除原来设置!!!
SYSCFG->EXTICR[BITx/4]|=GPIOx<<EXTOFFSET; //EXTI.BITx映射到GPIOx.BITx
//自动设置
EXTI_D1->IMR1|=1<<BITx; //开启line BITx上的中断(如果要禁止中断,则反操作即可)
if(TRIM&0x01)EXTI->FTSR1|=1<<BITx; //line BITx上事件下降沿触发
if(TRIM&0x02)EXTI->RTSR1|=1<<BITx; //line BITx上事件上升降沿触发
}
//GPIO复用设置
//GPIOx:GPIOA~GPIOK.
//BITx:0~15,代表IO引脚编号.
//AFx:0~15,代表AF0~AF15.
//AF0~15设置情况(这里仅是列出常用的,详细的请见STM32H743xx数据手册,Table 9~19):
//AF0:MCO/SWD/SWCLK/RTC; AF1:TIM1/2/TIM16/17/LPTIM1; AF2:TIM3~5/TIM12/HRTIM1/SAI1; AF3:TIM8/LPTIM2~5/HRTIM1/LPUART1;
//AF4:I2C1~I2C4/TIM15/USART1; AF5:SPI1~SPI6/CEC; AF6:SPI3/SAI1~3/UART4/I2C4; AF7:SPI2/3/6/USART1~3/6/UART7/SDIO1;
//AF8:USART4/5/8/SPDIF/SAI2/4; AF9;FDCAN1~2/TIM13/14/LCD/QSPI; AF10:USB_OTG1/2/SAI2/4/QSPI; AF11:ETH/UART7/SDIO2/I2C4/COMP1/2;
//AF12:FMC/SDIO1/OTG2/LCD; AF13:DCIM/DSI/LCD/COMP1/2; AF14:LCD/UART5; AF15:EVENTOUT;
void GPIO_AF_Set(GPIO_TypeDef* GPIOx,u8 BITx,u8 AFx)
{
GPIOx->AFR[BITx>>3]&=~(0X0F<<((BITx&0X07)*4));
GPIOx->AFR[BITx>>3]|=(u32)AFx<<((BITx&0X07)*4);
}
//GPIO通用设置
//GPIOx:GPIOA~GPIOK.
//BITx:0X0000~0XFFFF,位设置,每个位代表一个IO,第0位代表Px0,第1位代表Px1,依次类推.比如0X0101,代表同时设置Px0和Px8.
//MODE:0~3;模式选择,0,输入(系统复位默认状态);1,普通输出;2,复用功能;3,模拟输入.
//OTYPE:0/1;输出类型选择,0,推挽输出;1,开漏输出.
//OSPEED:0~3;输出速度设置,0,低速;1,中速;2,快速;3,高速.
//PUPD:0~3:上下拉设置,0,不带上下拉;1,上拉;2,下拉;3,保留.
//注意:在输入模式(普通输入/模拟输入)下,OTYPE和OSPEED参数无效!!
void GPIO_Set(GPIO_TypeDef* GPIOx,u32 BITx,u32 MODE,u32 OTYPE,u32 OSPEED,u32 PUPD)
{
u32 pinpos=0,pos=0,curpin=0;
for(pinpos=0;pinpos<16;pinpos++)
{
pos=1<<pinpos; //一个个位检查
curpin=BITx&pos;//检查引脚是否要设置
if(curpin==pos) //需要设置
{
GPIOx->MODER&=~(3<<(pinpos*2)); //先清除原来的设置
GPIOx->MODER|=MODE<<(pinpos*2); //设置新的模式
if((MODE==0X01)||(MODE==0X02)) //如果是输出模式/复用功能模式
{
GPIOx->OSPEEDR&=~(3<<(pinpos*2)); //清除原来的设置
GPIOx->OSPEEDR|=(OSPEED<<(pinpos*2));//设置新的速度值
GPIOx->OTYPER&=~(1<<pinpos) ; //清除原来的设置
GPIOx->OTYPER|=OTYPE<<pinpos; //设置新的输出模式
}
GPIOx->PUPDR&=~(3<<(pinpos*2)); //先清除原来的设置
GPIOx->PUPDR|=PUPD<<(pinpos*2); //设置新的上下拉
}
}
}
//设置GPIO某个引脚的输出状态
//GPIOx:GPIOA~GPIOK.
//pinx:引脚位置,范围:1<<0 ~ 1<<15
//status:引脚状态(仅最低位有效),0,输出低电平;1,输出高电平
void GPIO_Pin_Set(GPIO_TypeDef* GPIOx,u16 pinx,u8 status)
{
if(status&0X01)GPIOx->BSRRL=pinx; //设置GPIOx的pinx为1
else GPIOx->BSRRH=pinx; //设置GPIOx的pinx为0
}
//读取GPIO某个引脚的状态
//GPIOx:GPIOA~GPIOK.
//pinx:引脚位置,范围:1<<0 ~ 1<<15
//返回值:引脚状态,0,引脚低电平;1,引脚高电平
u8 GPIO_Pin_Get(GPIO_TypeDef* GPIOx,u16 pinx)
{
if(GPIOx->IDR&pinx)return 1; //pinx的状态为1
else return 0; //pinx的状态为0
}
//THUMB指令不支持汇编内联
//采用如下方法实现执行汇编指令WFI
void WFI_SET(void)
{
__ASM volatile("wfi");
}
//关闭所有中断(但是不包括fault和NMI中断)
void INTX_DISABLE(void)
{
__ASM volatile("cpsid i");
}
//开启所有中断
void INTX_ENABLE(void)
{
__ASM volatile("cpsie i");
}
//设置栈顶地址
//addr:栈顶地址
__asm void MSR_MSP(u32 addr)
{
MSR MSP, r0 //set Main Stack value
BX r14
}
//进入待机模式
void Sys_Standby(void)
{
PWR->WKUPEPR&=~(1<<0); //WKUPEN0=0,PA0不用于WKUP唤醒
PWR->WKUPEPR|=1<<0; //WKUPEN0=1,PA0用于WKUP唤醒
PWR->WKUPEPR&=~(1<<8); //WKUPP0=0,PA0高电平唤醒(上升沿)
PWR->WKUPEPR&=~(3<<16); //清除WKUPPUPD原来的设置
PWR->WKUPEPR|=2<<16; //WKUPPUPD=10,PA0下拉
PWR->WKUPCR|=0X3F<<0; //清除WKUP0~5唤醒标志
PWR->CPUCR|=7<<0; //PDDS_D1/D2/D3=1,允许D1/D2/D3进入深度睡眠模式(PDDS)
SCB->SCR|=1<<2; //使能SLEEPDEEP位 (SYS->CTRL)
WFI_SET(); //执行WFI指令,进入待机模式
}
//系统软复位
void Sys_Soft_Reset(void)
{
SCB->AIRCR =0X05FA0000|(u32)0x04;
}
//使能STM32H7的L1-Cache,同时开启D cache的强制透写
void Cache_Enable(void)
{
SCB_EnableICache(); //使能I-Cache,函数在core_cm7.h里面定义
SCB_EnableDCache(); //使能D-Cache,函数在core_cm7.h里面定义
SCB->CACR|=1<<2; //强制D-Cache透写,如不开启透写,实际使用中可能遇到各种问题
}
//时钟设置函数
//Fvco=Fs*(plln/pllm);
//Fsys=Fvco/pllp=Fs*(plln/(pllm*pllp));
//Fq=Fvco/pllq=Fs*(plln/(pllm*pllq));
//Fvco:VCO频率
//Fsys:系统时钟频率,也是PLL1的p分频输出时钟频率
//Fq:PLL1的q分频输出时钟频率
//Fs:PLL输入时钟频率,可以是HSI,CSI,HSE等.
//plln:PLL1倍频系数(PLL倍频),取值范围:4~512.
//pllm:PLL1预分频系数(进PLL之前的分频),取值范围:2~63.
//pllp:PLL1的p分频系数(PLL之后的分频),分频后作为系统时钟,取值范围:2~128.(且必须是2的倍数)
//pllq:PLL1的q分频系数(PLL之后的分频),取值范围:1~128.
//CPU频率(rcc_c_ck)=sys_d1cpre_ck=400Mhz
//rcc_aclk=rcc_hclk3=200Mhz
//AHB1/2/3/4(rcc_hclk1/2/3/4)=200Mhz
//APB1/2/3/4(rcc_pclk1/2/3/4)=100Mhz
//pll2_p_ck=(25/25)*440/2)=220Mhz
//pll2_r_ck=FMC时钟频率=((25/25)*440/2)=110Mhz
//外部晶振为25M的时候,推荐值:plln=160,pllm=5,pllp=2,pllq=4.
//得到:Fvco=25*(160/5)=800Mhz
// Fsys=pll1_p_ck=800/2=400Mhz
// Fq=pll1_q_ck=800/4=200Mhz
//返回值:0,成功;1,失败。
u8 Sys_Clock_Set(u32 plln,u32 pllm,u32 pllp,u32 pllq)
{
u16 retry=0;
u8 status=0;
PWR->CR3&=~(1<<2);
STM32H750是意法半导体(STMicroelectronics)推出的一款高性能的微控制器,属于STM32 H7系列,具有强大的双核ARM Cortex-M7处理器,适用于高精度的实时应用。本项目主要涉及STM32H750的定时器输入捕获功能,通过寄存器库进行驱动程序的编写,适用于STM32H7系列单片机的调测与移植。 在嵌入式系统中,定时器是至关重要的组件,它能够提供周期性的中断或者计时功能。STM32H750中的定时器不仅具备基础的定时功能,还支持输入捕获模式,能够测量外部信号的脉冲宽度或频率。输入捕获功能允许MCU记录外部输入引脚上的电平变化时刻,这对于电机控制、脉宽调制(PWM)信号分析等应用非常有用。 STM32H750的定时器有多种工作模式,包括自由运行、单脉冲、重复计数、输入捕获和输出比较。在输入捕获模式下,用户可以配置特定的定时器通道来捕捉外部信号的上升沿或下降沿,或者两者都捕获。捕获事件会更新定时器的计数值,这个值可以用来计算输入信号的频率、周期或者占空比。 寄存器库驱动程序是STM32微控制器编程常用的方法,它直接操作硬件寄存器,相比HAL库更底层,灵活性更高,但需要对STM32的内核结构有深入理解。在STM32H750的输入捕获配置中,开发者需要设置以下寄存器: 1. TIMx_CR1(定时器控制寄存器1):开启定时器,设置工作模式。 2. TIMx_ICRx(输入捕获配置寄存器):选择输入通道,设置滤波器和极性。 3. TIMx_IER(中断使能寄存器):启用输入捕获中断。 4. TIMx_SR(状态寄存器):读取捕获事件的状态。 5. TIMx_CCRx(捕获/比较寄存器):存储捕获到的值。 项目提供的驱动程序应该包含了初始化定时器、配置输入捕获、开启中断、处理捕获事件等功能的函数。在调测和移植过程中,需要注意以下几点: - 确保正确连接了输入捕获的外部信号线。 - 配置GPIO为输入模式,并启用适当的上拉或下拉电阻。 - 根据系统时钟和期望的分辨率设置定时器预分频器和计数器重载值。 - 检查中断服务程序是否能正确响应输入捕获事件,更新捕获值并处理相关业务逻辑。 - 注意中断优先级设置,避免中断嵌套带来的问题。 STM32H750的定时器输入捕获功能结合寄存器库驱动,能够为开发者提供高度定制化的定时测量解决方案,适用于各种需要精确时间测量的场合。在实际应用中,开发者需要根据项目需求调整代码,确保其兼容性和效率。







































































- 1

- #完美解决问题
- #运行顺畅
- #内容详尽
- #全网独家
- #注释完整


- 粉丝: 27w+
- 资源: 5912





我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 实现冒泡排序的 C++ 源码
- ICM20602硬件高速SPI姿态读取:卓越通信速度下的精确姿态控制及软件教程资源指南,ICM20602硬件SPI姿态读取:快速通信速度与软件教程资料解析,ICM20602硬件SPI 姿态读取,通信速
- e4a类库大全/e4a类库全集/易安卓e4a类库949个类库合集不断加新
- 实现冒泡排序的 JAVA 源码
- 分布式驱动电动汽车技术:搭建与控制策略研究,附着系数估计与车辆状态参数估计技术探讨,涵盖扩展卡尔曼至平方根容积卡尔曼等多类算法及电机无传感器控制方法 ,分布式驱动电动汽车系统搭建与技术探讨:附着系数估
- 基于蒙特卡洛模拟的电动汽车充电负荷研究:结合CFA、SEM与潜变量增长模型的统计分析实践探索 利用MATLAB对电动汽车数量进行调整与模拟研究 ,蒙特卡洛模拟电动汽车充电负荷研究:CFA与SEM模型下
- ubuntukylin-13.04-desktop-i386.iso
- 基于分布式驱动电动汽车的车辆状态估计模型 采用容积卡尔曼观测器与simulink联合仿真,精准估计纵向速度、质心侧偏角等四个状态,涉及无传感器控制及卡尔曼滤波改进技术 ,容积卡尔曼滤波器的车辆状态估计
- 七自由度整车模型:基于魔术公式与Dugoff轮胎模型的全面验证及控制系统仿真,七自由度整车模型:基于魔术公式与Dugoff轮胎模型的全面解析及工况仿真验证(含ABS、ESP系统仿真),七自由度整车模型
- 基于MATLAB Simulink仿真平台的蓄电池双向DC DC控制策略与电压/功率稳定控制研究,MATLAB Simulink仿真平台下的蓄电池双向DC-DC控制策略:电压外环与电流内环的稳定控制研
- 基于LQR算法的自动驾驶路径跟踪控制-Carsim与Simulink联合仿真研究,基于LQR算法的自动驾驶路径跟踪控制:Carsim与Simulink联合仿真研究,自动驾驶,carsim,simul
- 20250219-2025具身智能行业发展研究报告.pdf
- MixRamDisk 下载 MixRamDisk 免费下载
- STM32与BH1750光照传感器采集数据并通过IIC总线通讯OLED显示源码及原理图详解,STM32与BH1750光照传感器采集数据并OLED显示源码解析,STM32和BH1750光照传感器和IIC
- 微信 MMTLS 1RTTI 抓包
- 基于深度强化学习的混合动力汽车能量管理策略:DQN算法优化功率分配,兼顾油耗与SOC维持,基于深度强化学习的混合动力汽车能量管理策略:DQN算法优化功率分配,以等效油耗和SOC维持为奖励函数,基于深度


