共2条
1/1 1 跳转至页
F449,LCD,32768Hz F449的LCD显示必须要用到32768Hz的晶振吗?

问
我的1/4duty的lcd在F449上面无法显示出来(LCDMEM中的值有改变)——无任何显示。
我只使用的是8M的晶振。低速振荡我没有连接。
LCD频率控制使用基本定时器(使用BTCTL的默认设置,程序中未做设置),
我看到基本定时器的时钟来源是ACLK,而ACLK又来源于LFXT1CLK。
但是我现在并没有连接XIN和XOUT,这样会不会造成基本定时器根本就没有启动?
或者是基本定时器已经启动了,而我在程序中没有打开?
如果是因为没有ACLK而没启动基本定时器的话,我想在XIN和XOUT上连接一个32768Hz的晶振,需要连接电容到地吗?如果要的话,要选用多大的电容啊?
我的PCB是已经设计好的,如果需要连接电容的话会非常的不好接。
char Group1[10] = {
// [ p c g b d e f a ]
// 第一、二、三个八段码显示——“流量”三个数显示
//091H~093H
0x5F, /* "0" LCD segments a+b+c+d+e+f = 0101 1111 */
0x50, /* "1" LCD segments b+c */
0x3D, /* "2" LCD segments a+b+d+e+g */
0x79, /* "3" LCD segments a+b+c+d+g */
0x72, /* "4" LCD segments b+c+f+g */
0x6B, /* "5" LCD segments a+c+d+f+g */
0x6F, /* "6" LCD segments a+c+d+e+f+g */
0x51, /* "7" LCD segments a+b+c */
0x7F, /* "8" LCD segments a+b+c+d+e+f+g */
0x7B /* "9" LCD segments a+b+c+d+f+g */
};
void DispLockTime(int time1,int time2,int time3) //display lock time setting
{
LCDMEM[12] = Group1[time1];
LCDMEM[11] = Group1[time2];
LCDMEM[10] = Group1[time3];
}
void main(viod)
{
int i;
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
FLL_CTL0 |= XCAP14PF; // Configure load caps
LCDCTL = LCDON + LCD4MUX + LCDP2; // STK LCD 4Mux, S0-S17
BTCTL = BTFRFQ1; // STK LCD freq
P5SEL = 0xFC; // Common and Rxx all selected
StartInit();
TACTL = TASSEL1 + TACLR; // SMCLK, clear TAR
CCTL0 = CCIE; // CCR0 interrupt enabled
CCR0 = 5000;
P4DIR |= 0xff; // P5.1 output
P4OUT=0x00;
P6DIR |=0XFF;
P6OUT=0X06;
TACTL |= MC1; // Start Timer_A in continuous mode
_EINT(); // Enable interrupts
ClrDisp();
DispLockTime(4,5,6);
for (;;)
{
for (i=0; i<3; ++i) // Display "210"
LCDMEM[i] = Group1[i];
}
}
// Timer A0 interrupt service routine
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
ulcount++;
if(ulcount>5)
{
P4OUT ^= 0xf7; // Toggle P5.1
P6OUT ^= 0X06;
//CCR0 += 50000; // Add Offset to CCR0
ulcount=0;
}
}
void StartInit(void)
{
unsigned int i;
WDTCTL = WDTPW + WDTHOLD; // stop watchdog timer
FLL_CTL0 = XCAP18PF; // set load capacitance for 32k xtal
FLL_CTL1 = FLL_CTL1 & ~XT2OFF; // clear bit = high freq xtal on
do // loop until flag is clear
{
FLL_CTL0 = FLL_CTL0 & ~XT2OF; // clear high freq oscillator fault flag
for (i = 50000; i; i--); // delay for crystal to start and FLL to lock
}
while (FLL_CTL0 & XT2OF); // test high freq oscillator fault flag
// if flag remained clear then -
FLL_CTL1 = SELS; // switch SMCLK = HF xtal
P1DIR = 0x32; // P1.1, P1.4 & P1.5 to outputs
P1SEL = 0x32; // P1.1, P1.4 & P1.5 functions to output
} 答 1: 希望高手指点一下,万分感激! 答 2: 32768不一定是必须的,但是你的程序里设置的是使用这个晶体的,所以就成了必须的了。 答 3: bt可以用smclk与aclk。不过,所能达到低功耗的要求就不一样了
推荐用32768
我只使用的是8M的晶振。低速振荡我没有连接。
LCD频率控制使用基本定时器(使用BTCTL的默认设置,程序中未做设置),
我看到基本定时器的时钟来源是ACLK,而ACLK又来源于LFXT1CLK。
但是我现在并没有连接XIN和XOUT,这样会不会造成基本定时器根本就没有启动?
或者是基本定时器已经启动了,而我在程序中没有打开?
如果是因为没有ACLK而没启动基本定时器的话,我想在XIN和XOUT上连接一个32768Hz的晶振,需要连接电容到地吗?如果要的话,要选用多大的电容啊?
我的PCB是已经设计好的,如果需要连接电容的话会非常的不好接。
char Group1[10] = {
// [ p c g b d e f a ]
// 第一、二、三个八段码显示——“流量”三个数显示
//091H~093H
0x5F, /* "0" LCD segments a+b+c+d+e+f = 0101 1111 */
0x50, /* "1" LCD segments b+c */
0x3D, /* "2" LCD segments a+b+d+e+g */
0x79, /* "3" LCD segments a+b+c+d+g */
0x72, /* "4" LCD segments b+c+f+g */
0x6B, /* "5" LCD segments a+c+d+f+g */
0x6F, /* "6" LCD segments a+c+d+e+f+g */
0x51, /* "7" LCD segments a+b+c */
0x7F, /* "8" LCD segments a+b+c+d+e+f+g */
0x7B /* "9" LCD segments a+b+c+d+f+g */
};
void DispLockTime(int time1,int time2,int time3) //display lock time setting
{
LCDMEM[12] = Group1[time1];
LCDMEM[11] = Group1[time2];
LCDMEM[10] = Group1[time3];
}
void main(viod)
{
int i;
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
FLL_CTL0 |= XCAP14PF; // Configure load caps
LCDCTL = LCDON + LCD4MUX + LCDP2; // STK LCD 4Mux, S0-S17
BTCTL = BTFRFQ1; // STK LCD freq
P5SEL = 0xFC; // Common and Rxx all selected
StartInit();
TACTL = TASSEL1 + TACLR; // SMCLK, clear TAR
CCTL0 = CCIE; // CCR0 interrupt enabled
CCR0 = 5000;
P4DIR |= 0xff; // P5.1 output
P4OUT=0x00;
P6DIR |=0XFF;
P6OUT=0X06;
TACTL |= MC1; // Start Timer_A in continuous mode
_EINT(); // Enable interrupts
ClrDisp();
DispLockTime(4,5,6);
for (;;)
{
for (i=0; i<3; ++i) // Display "210"
LCDMEM[i] = Group1[i];
}
}
// Timer A0 interrupt service routine
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
ulcount++;
if(ulcount>5)
{
P4OUT ^= 0xf7; // Toggle P5.1
P6OUT ^= 0X06;
//CCR0 += 50000; // Add Offset to CCR0
ulcount=0;
}
}
void StartInit(void)
{
unsigned int i;
WDTCTL = WDTPW + WDTHOLD; // stop watchdog timer
FLL_CTL0 = XCAP18PF; // set load capacitance for 32k xtal
FLL_CTL1 = FLL_CTL1 & ~XT2OFF; // clear bit = high freq xtal on
do // loop until flag is clear
{
FLL_CTL0 = FLL_CTL0 & ~XT2OF; // clear high freq oscillator fault flag
for (i = 50000; i; i--); // delay for crystal to start and FLL to lock
}
while (FLL_CTL0 & XT2OF); // test high freq oscillator fault flag
// if flag remained clear then -
FLL_CTL1 = SELS; // switch SMCLK = HF xtal
P1DIR = 0x32; // P1.1, P1.4 & P1.5 to outputs
P1SEL = 0x32; // P1.1, P1.4 & P1.5 functions to output
} 答 1: 希望高手指点一下,万分感激! 答 2: 32768不一定是必须的,但是你的程序里设置的是使用这个晶体的,所以就成了必须的了。 答 3: bt可以用smclk与aclk。不过,所能达到低功耗的要求就不一样了
推荐用32768
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【EEPW电子工程师创研计划】技术变现通道已开启~ | |
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
“我踩过的那些坑”主题活动——第001期 | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
分享汽车通信和多媒体总线结构被打赏20分 | |
【我踩过的那些坑】结构堵孔导致的喇叭无声问题被打赏50分 | |
NUCLEO-U083RC学习历程38+串口通过队列的方式输出两个字符串被打赏20分 | |
【我踩过的那些坑】分享一下调试一款AD芯片的遇到的“坑”被打赏50分 | |
电流检测模块MAX4080S被打赏10分 | |
【我踩过的那些坑】calloc和malloc错误使用导致跑飞问题排查被打赏50分 | |
分享电控悬架的结构与工作原理(一)被打赏20分 | |
多组DCTODC电源方案被打赏50分 | |
【我踩过的那些坑】STM32cubeMX软件的使用过程中的“坑”被打赏50分 | |
新手必看!C语言精华知识:表驱动法被打赏50分 |