这段时间一直在学习这个S32K144的开发、学习了解了S32 Designed stdio(S32DS)和MDK构建项目的两种方法。
有幸在GIT网站上搜索到了一篇关于MDK的S32点灯的文件,综合学习。
这两段程序都支持蓝宙的开发板,一直想着等我解决了这些基本的问题一定要分享出来。
整理一些遇到的小问题,其实这些东西都可以在HELP帮助文档中查找。
1,关于S32 DS怎样打开已有新项目
2,关于S32 DS如何调整背景色和字体大小
S32K144的RTC使用的时钟源是LPO,因为它的开发板蓝宙上不支持RTC外部晶振,因此我们和demo一样选择LPO
以下是关于RTC时钟的配置,并开启秒中断和RTC报警中断
/*******************************************************************************
Function: init_rtc
Notes : ³õʼ»¯ RTC £¬utc_time: µ±Ç° UTC ʱ¼ä
: 32kHz RTC clock derived from 128kHz internal LPO
*******************************************************************************/
void init_rtc(int utc_time)
{
SIM->LPOCLKS = SIM_LPOCLKS_RTCCLKSEL(1) | SIM_LPOCLKS_LPO32KCLKEN(1)| SIM_LPOCLKS_LPO1KCLKEN(1);
SEGGER_RTT_printf( 0, "init_rtc SIM->LPOCLKS:0x%x.\r\n", SIM->LPOCLKS );
PCC->PCCn[PCC_RTC_INDEX] = PCC_PCCn_CGC_MASK; // Enable clock to RTC module - BUS_CLK
RTC->SR = RTC_SR_TCE(0);
RTC->SR =0x00000000;
RTC->TAR = 25; // Alarm in 3s
RTC->IER = RTC_IER_TAIE(1);
SEGGER_RTT_printf( 0, "init_rtc RTC->IER:0x%x.\r\n", RTC->IER );
RTC->TSR = utc_time;
SEGGER_RTT_printf( 0, "init_rtc RTC->TSR:0x%x.\r\n", RTC->TSR );
RTC->CR = RTC_CR_CPE(1) | RTC_CR_LPOS(1);
RTC->CR =0x00000004;
SEGGER_RTT_printf( 0, "init_rtc RTC->CR:0x%x.\r\n", RTC->CR );
RTC->IER = 0x00000014; ////TSIE TAIE£¨TAF¶¨Ê±Æ÷±¨¾¯Ê¹ÄÜ£©
RTC->SR = RTC_SR_TCE(1); //RTC_SR_TAF Ö»¶Á¼Ä´æÆ÷
}
下面代码是为这两个中断配置和使能中断优先级
static void IRQ_Config(void)
{
NVIC->ICPR[1] = 1 << (RTC_IRQn % 32); /* clr any pending IRQ*/
NVIC->ISER[1] = 1 << (RTC_IRQn % 32); /* enable IRQ */
NVIC->IP[RTC_IRQn] = 0x8; /* priority 10 of 0-15*/
NVIC->ICPR[1] = 1 << (RTC_Seconds_IRQn % 32); /* clr any pending IRQ*/
NVIC->ISER[1] = 1 << (RTC_Seconds_IRQn % 32); /* enable IRQ */
NVIC->IP[RTC_Seconds_IRQn] = 0x9; /* priority 10 of 0-15*/
}
系统时钟配置
void SOSC_init_8Mhz(void)
{
SCG->SOSCDIV = 0x00000101;
while(SCG->SOSCCSR & SCG_SOSCCSR_LK_MASK);//µÈ´ýSOSCCSR½âËø,¼Ä´æÆ÷½âËøºó²Å¿ÉдÈë
SCG->SOSCCSR = 0x00000001;
while(!(SCG->SOSCCSR &SCG_SOSCCSR_SOSCVLD_MASK));
}
void SPLL_init_160MHz(void )
{
while(SCG->SPLLCSR & SCG_SPLLCSR_LK_MASK);
SCG->SPLLCSR = 0x00000000;
SCG->SPLLDIV =0x00000302;
SCG->SPLLCFG = 0x00180000;
while(SCG->SPLLCSR &SCG_SPLLCSR_LK_MASK);
SCG->SPLLCSR = 0x00000001;
while(!(SCG->SPLLCSR & SCG_SPLLCSR_SPLLVLD_MASK));
void NormalRUNmode_40MHz(void)
{
SCG->RCCR = SCG_RCCR_SCS(6)
|SCG_RCCR_DIVCORE(0x01)
|SCG_RCCR_DIVBUS(0x01)
|SCG_RCCR_DIVSLOW(0x02);
while(((SCG->CSR &SCG_CSR_SCS_MASK) >>SCG_CSR_SCS_SHIFT)!=6)
{}
}
GPIO配置,PTE8 和PTB4、PTB5
void GPIO_Init(void)
{
/*******LED---PTE8¶Ë¿ÚÅäÖÃ*******/
PCC->PCCn[PCC_PORTE_INDEX] |= PCC_PCCn_CGC_MASK;
PCC->PCCn[PCC_PORTB_INDEX] |= PCC_PCCn_CGC_MASK;
PTE->PDDR |= (1<<8);
PTB->PDDR |= (1<<4);
PTB->PDDR |= (1<<5);
PORTE->PCR[8] = 0x00000100; //设置端口的 复用功能选项
PORTB->PCR[4] = 0x00000100;
PORTB->PCR[5] = 0x00000100;
PTE->PCOR |= (1<<8);
PTB->PCOR |= (1<<4);
PTB->PCOR |= (1<<5);
}
直接上程序完整连接这个是S32 DS开发的这里没有晒程序
链接:https://pan.baidu.com/s/1R9A73UgJkWc_RsFU4A5qEQ
提取码:6zbo
这个是上面示例程序的完整代码
链接:https://pan.baidu.com/s/1HZvAF0QJNIxs_Y8pF7PwnQ
提取码:ki8a