stm8s定时器TIM2与ADC1中断优先问题

stm8s定时器TIM2与ADC1中断优先问题,第1张

ITC_SetSoftwarePriority(ITC_IRQ_TIM2_OVF, ITC_PRIORITYLEVEL_0);//定时器TIM2溢出中断
ITC_SetSoftwarePriority(ITC_IRQ_ADC2, ITC_PRIORITYLEVEL_1);//ADC2中断优先级为1,比TIM2高
你确定有ADC1?ITC_SetSoftwarePriority的中断源中,我没有看到ADC1也。
望采纳~

//此例程是通过TIM2 CH1(PD4脚)通道来输出一个频率2K 占空比可调的方波,占空比可通过PD7脚的按键调
#include "STM8S105Kh"
typedef unsigned char u8;
typedef unsigned int u16;
u16 value;
void SystemInit(void)
{
CLK_CKDIVR = 0x08; // 16M内部RC经2分频后系统时钟为8M
CLK_PCKENR1 |= 0x60; //使能TIM2与TIM3与主频连接
PD_CR2 |= 0x80; //使能PD7口外部中断
}
void GPIO_init(void)
{
PD_DDR = 0x1F; //配置PD端口的方向寄存器全输出
PD_CR1 = 0x1F; //设置PD为推挽输出
}
void TIM2_init(void) //TIM2 CH1 工作于模式1
{
TIM2_CCMR1= 0x60; // PWM 模式 1,TIM2 CH1
TIM2_CCER1= 0x03; // CC1配置为输出
TIM2_ARRH = 0x07; // 配置PWM分辨率为10位,ARR=0x07D0
TIM2_ARRL = 0xD0; // PWM频率=8M/0x07D0=2000Hz
TIM2_CR1 |= 0x01; // 计数器使能,开始计数
}
void init_devices(void)
{
asm("sim");
SystemInit();
GPIO_init();
TIM2_init();
_asm("rim"); //开总中断
}
void main( void )
{
init_devices();
while(1)
TIM2_CCR1=value;//改变value值可改变频率
}
/
函数名 : @near @interrupt void TLI_IRQHandler (void)
功能描述: 中断服务程序
按下PD7口按键来改变占空比
/
@near @interrupt void TLI_IRQHandler (void)
{
PD_CR2 &= 0x7F; //关PD7外部中断
value+=50;
while(value>1000)
value=0;
PD_CR2 |= 0x80; //使能PD7口外部中断
return;

1、总中断开了吧~~~ enableInterrupts();开总中断(我用的是ST的编译器,不是IAR)
2、TIM4_SR寄存器是否应该是TIM4_SR1
3、把初始化程序这样改一下试试,不用计数器
TIM4_ARR = 0x9c; //定时01ms
TIM4->IER = 0x01; //使能溢出中断
TIM4->PSCR= 0x01; //2分频
TIM4->CR1 = 0x01; //enable Timer4


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12895767.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-28
下一篇 2023-05-28

发表评论

登录后才能评论

评论列表(0条)

保存