我尝试改变我的DSPIC33 EP256MU806设备的时钟频率时遇到了麻烦。我有一个16MHz晶体连接在我的主要引脚(OSC1和OSC2)。因此,当我使用配置寄存器来选择它作为时钟源时,我的串行端口计算正在工作:_FOSCSEL(FNOSC_PRI&IESO_OFF)_FOSC(FCKSM_CSDCMD&IOL1WAY_OFF&OSCIOFNC_ON&POSCMD_HS),因此随着工作的进行(define CLOCK_FREQ 8000000),我想改变它的我用FRC内部时钟源供电,然后切换到从主16MHz晶体产生的所需时钟频率:_FOSCSEL(FNOSC_FRC&IESO_OFF)//用FRC时钟源启动//启用时钟切换并在HS模式_FOSC(FCKSM_CSECMD&IOL1WAY)中配置POSC因此,在配置寄存器中,我试图简单地将时钟频率设置为8MHz,因此简单地将时钟源更改为Primary而不用PLL:u buil
tin_write_OSCCONH(0b010);_builtin_write_OSCCONL(OSCCON|0x01);//等待时钟切换发生(OSC)康斯!(= 0B010);/ /等待PLL锁定(OSCCONbits.LOCK)!= 1),这是为了使时钟达到8MHz,串行端口再次工作。所以现在我有点冒险,去了一个60MHz的指令钟。代码与上面的代码基本相同,但是现在需要PLL来生成120MHz,所以指令时钟是60MHz://Initiate Clock Switch to Primary Oscillator with PLL(NOSC=0b011)u builtin_write_OSCCONH(0b011);/**N1=CLKDIVbits.PLLPRE+2*N2=2*(CLKDIVbits.PLLPOST+1)*M=PL=PLPLLDIV+2**CLOCK=(晶体*M)/(N1*N2)*/CLKDIVbits.PLLPRE=0x00;CLKDIVbits.PLLPOST=0x00;PLLFBDbits.PLLDIV=28;u builtin_write_OSCCONL(OSCCON|0x01);//等待时钟切换发生(OSCCONbits.COSC!(=时钟);/ /等待PLL同步(OSCCONbits.LOCK)!我用PICKIT3对这个代码进行了几次编程,但最终还是成功了,因为我的LED现在闪烁的频率要高得多,但是我对CLOCKK_FREQ的定义设置为60000000,我的串行日志UART现在工作在138KHz左右。我用数据表中的方程式17-1来设置它,它指出:波特率=Fp/(16*(UxBRG+1))其中Fp表示指令周期时钟频率FOSC/2U1BRG=((CLOCK_FREQ/SERIAL_LOGGING_BAUD)/16)-1;CLOCK_FREQ=60000000SERIAL_LOGGING_BAUD=19200我不知道为什么不是w奥林。现在有一个最小和最大波特率的指令时钟频率,但我应该在19k2的范围内。哇,这是不好的,只是重新编程几次,它开始工作。现在我关心的是可重复性。我会发布它,甚至认为它是排序。有些事怪怪的。