11
获得 1 次赞
帮助过3人
stm32 TIM3 工作于PWM1,向上计数,软件仿真中:中断函数里更改CCR1的值,然后再软件设置UG位产生更新,将CCR1的值更新到影子寄存器,发现CNT清零了,但是为什么CCR1影子寄存器的值没有被更新啊?谢谢了 void TM3_PWM_Config(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; //比较捕获模式初始化 //基本的初始化 TIM_TimeBaseStructure.TIM_Prescaler=0; //PSC预分频 不分频72MHZ TIM_TimeBaseStructure.TIM_Period=900; //自动重载寄存器 0到999 1000次一个周期 TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式 TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1 ; //不分频 见TIMx_CR1寄存器位9 位8 TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure); TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1 ; TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse=CCR1_Val; //设定比较值 TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High; TIM_OC1Init(TIM3,&TIM_OCInitStructure); //初始化了通道1 TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable); TIM_ITConfig(TIM3,TIM_IT_CC1,ENABLE); //使能匹配中断 //使能TM3重载寄存器ARR TIM_ARRPreloadConfig(TIM3,ENABLE); //使能TM3 TIM_Cmd(TIM3,ENABLE); } void TIM3_IRQHandler(void) { if(TIM_GetITStatus(TIM3,TIM_IT_CC1)==SET) { TIM_ClearITPendingBit(TIM3,TIM_IT_CC1); //软件清0 CCR1_Val++; TIM_SetCompare1(TIM3,CCR1_Val); TIM_ClearFlag(TIM3,TIM_FLAG_Update); TIM_GenerateEvent(TIM3,TIM_EventSource_Update); if(CCR1_Val==998) CCR1_Val=500; } }
求助! 我刚刚开始学习使用单片机,msp430也是我第一个接触的单片机。 目前使用的是 msp430G2553 的LaunchPad来学习。 有如下一些问题,自己无法确认和解决的。 (1) 我从一些资料知道430 是通过 寄存器来控制其操作的。 如: P1DIR |=BIT0 这个操作,我的理解是 P1DIR 是指 P1端的方向寄存器,BIT0是指 P1端中的 0 位 。 具体就是指 P1.0 这个引脚。 然后再通过 P1DIR 这个方向寄存器 和 BIT0这个位, 按位进行或运算得出的数值赋值给 P1DIR 寄存器 。最后通过 P1DIR=1 还是 0 来判断P1.2 是输出还是输入。 不知道我这样理解是不是有问题? (2) 如果我以上理解没错的话 。P1DIR |=BIT0 是把 P1.0 引脚设为输出的,而 PxDIR 寄存器的初始值我查出来是 0,也就是说 BIT0 的初始值是 1 ? 如果是的话 那所有的 BITx 位的初始值都是 1 吗? (3) I/O 口 和 寄存器 的使用 如: P1OUT |=BIT0 , P1DIR &=~BIT0 ,if(P1IN & BIT0)之类的是否都是像我这种思路理解的? 如果不是,我该如何理解? (4) P1DIR |=BIT0 和 P2DIR |=BIT0 中的 BIT0有何区别? 是否只是各自P1,P2端寄存器中的 0 位? 还有我该如何正确 BITx 这个概念? (5) 像 if (P1IN & BIT0) , P1IES &=~BIT0 之类来判断是有外来信号的。 外来的信号是直接进入寄存器 赋值给寄存器,还是进入BIT0? (6) 如果以上问题我的理解全部错误 那....我该如何正确 I/O 口和寄存器,BITx 位 的关系 ? P1DIR |=BIT0 中的 |= 如何理解? 它 还是一个 位运算符号吗? 还是有其他涵义? (7) 在msp430的程序中 符号 我很难理解 如: TACTL=TASSEL0+TACLR , _BIS_SR(SCG1) .........之类的。 有些我通关过查资料找到了它们的涵义,也能理解语句的意思。可有些真心不好理解,连头绪都没有,像 中断函数中的 vector 我完全无法理解为什么这里会出现一个矢量!(插一句,430中的矢量是指什么?) 还有 SCG1 我完全不知道它是什么! 我知道这里我无法理解的原因我因为对 430 原理理解不够,接触的时间太短。 可是有时候突然看到 一个看不懂的东西,真心难受啊! 所以我最想问下,我该如何学习去看懂它。 有人告诉我 去看头文件,和一些原理。原理之类的资料我现在在慢慢的学习中,可是头文件看不懂.......如: WDTIE = 0x0001 我还是不知道它是什么意思啊。 (本人学机械自动化的,现大二,对计算机的一些东西理解较少) 麻烦各位,前辈了!!!
MSP430FR5739的32768HZ晶振不起振,不知什么原因,求指导。 匹配电容用的两个18pf的电容(没找到12pf)的。 #include "msp430fr5739.h" /************************************************* **函数(模块)名称: main(void) **功能: 初始化系统 **输入参数: 无 **输出参数: 无 **函数返回值说明: 无 **使用的资源 **其它说明: *************************************************/ void main(void) { WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗 PJSEL0|=BIT4;//配置PJ.4,PJ.5; CSCTL0 = CSKEY; CSCTL1 |= DCOFSEL0 + DCOFSEL1; CSCTL2 = SELA_0 + SELS_0 + SELM_0; // MCLK = SMCLK = ACLK CSCTL3 = DIVA_0 + DIVS_0 + DIVM_0; CSCTL4 &= ~XT1OFF; CSCTL5&=~XT1OFFG; P1DIR |= BIT2+BIT3+BIT0; P1SEL0 |= BIT2+BIT3; // P1.2 P1.3选择第二功能 TA1CCR0 = 100-1; // PWM周期为32768/100 TA1CCTL1 = OUTMOD_7; // CCR1 复位置位模式 TA1CCR1 = 75; // CCR1 占空比75% TA1CCTL2 = OUTMOD_7; // CCR2 复位置位模式 TA1CCR2 = 25; // CCR2 占空比25% TA1CTL = TASSEL_2 + MC_1 + TACLR; // SMCLK, 增计数,清除计数值 while(1) { LPM3; } } 测得的P1.2,1.3的方波周期在100HZ左右,应该是晶振没起振,求高手帮忙解决。。。