完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
用tiM8_ch2已经做出波形,不知如何记录已发出脉冲个数. 想向高手求教update event(UIF)用法.
void TIM8_IRQHandler(void) { if (TIM_GetITStatus(TIM8, TIM_IT_Update) != RESET) { TIM_ClearITPendingBit(TIM8, TIM_IT_Update); timer8_count1++; // timer8_counter } 此方法进不了中断, TIM_IT_Update 变为 TIM_IT_CC2也不行. |
|
相关推荐
1个回答
|
|
根据您的描述,您已经使用TIM8_ch2生成了波形,现在想要记录已发出的脉冲个数。您尝试使用update event (UIF)来实现这个功能,但是遇到了一些问题。以下是一些建议和解决方案:
1. 首先,请确保您的定时器配置正确。在初始化定时器时,您需要配置时钟源、预分频器、自动重装寄存器、捕获/比较模式寄存器等参数。以下是STM32的定时器初始化示例: ```c void TIM8_Init(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; // 使能定时器8时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8, ENABLE); // 定时器8 NVIC 配置 NVIC_InitStructure.NVIC_IRQChannel = TIM8_UP_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); // 定时器8 配置 TIM_TimeBaseStructure.TIM_Period = 0xFFFF; // 自动重装寄存器周期的值 TIM_TimeBaseStructure.TIM_Prescaler = 71; // 预分频器 TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; // 向上计数模式 TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStructure); // 使能定时器8 TIM_Cmd(TIM8, ENABLE); } ``` 2. 接下来,配置捕获/比较模式寄存器以捕获TIM8_ch2的脉冲。以下是配置TIM8_ch2捕获模式的示例: ```c void TIM8_CH2_Init(void) { TIM_ICInitTypeDef TIM_ICInitStructure; // 配置TIM8_CH2作为输入 TIM_ICInitStructure.TIM_Channel = TIM_Channel_2; TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; TIM_ICInitStructure.TIM_ICFilter = 0; TIM_ICInit(TIM8, &TIM_ICInitStructure); // 使能捕获/比较中断:更新事件 TIM_ITConfig(TIM8, TIM_IT_Update, ENABLE); } ``` 3. 在您的中断处理函数中,检查TIM8的中断状态,并在触发更新事件时增加计数器。以下是修改后的中断处理函数示例: ```c void TIM8_IRQHandler(void) { if (TIM_GetITStatus(TIM8, TIM_IT_Update) != RESET) { TIM_ClearITPendingBit(TIM8, TIM_IT_Update); timer8_count1++; // 增加计数器 } } ``` 4. 如果您仍然无法进入中断,请检查您的中断向量表是否正确配置。在您的启动文件中(通常是 startup_stm32f10x.s 或 startup_stm32f103xe.s),确保TIM8_UP_IRQn的中断处理函数已正确链接: ```assembly .syntax unified .cpu cortex-m3 .fpu softvfp .thumb .global g_pfnVectors .global Default_Handler /* start address for the initialization values of the .data section. defined in linker script */ .word 0x20000000 + 0x00000020 + 0 /* start address for the .data section. defined in linker script */ .word 0x20000000 + 0x00000020 /* start address for the .bss section. defined in linker script */ .word 0x20000000 + 0x00000400 /* stack used for the system initialization. defined in linker script */ .word 0x20000200 /* reset handler */ .word Reset_Handler /* export address table */ .word SystemInit .word NmiSR .word FaultISR .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word TIM8_UP_IRQHandler /* 添加此行以链接TIM8_UP_IRQn */ .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 .word 0 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1659 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1571 浏览 1 评论
998 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
695 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1617 浏览 2 评论
1877浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
663浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
529浏览 3评论
548浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
517浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-30 03:00 , Processed in 1.007027 second(s), Total 76, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号