头像-8413

11

  • 天津市天津市
  • DSP
  • 汽车电子

个人成就

获得 1 次赞

帮助过3人

stm32f103 TIM3 UG位更新

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 I/O 口和寄存器使用的问题

求助! 我刚刚开始学习使用单片机,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晶振不起振

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左右,应该是晶振没起振,求高手帮忙解决。。。