在线时间276 小时
UID2086952
注册时间2015-8-9
NXP金币301
TA的每日心情 | 开心 2023-6-2 13:32 |
---|
签到天数: 272 天 连续签到: 1 天 [LV.8]以坛为家I
金牌会员
 
- 积分
- 4461
- 最后登录
- 2023-6-2
|
能够控制LED了,能够跑系统了,接下来比较重要的一个环节就是 通信了.
毕竟按键只有两个,2^2 四种状态.
KL27Z的LPUART0连接到了OpenSDA上面,OpenSDA又直接换成了miniUSB的接口.
只要装好了OpenSDA的驱动,连串口转换电平工具也省了..
上代码.
void initUARTPin(TYPE_E_UART uart){
switch(uart){
case UART_TYPE_U0:{
SIM->SCGC5|=SIM_SCGC5_PORTA_MASK;
PORTA->PCR[1]=PORT_PCR_MUX(2);//LPUART0 TX.
PORTA->PCR[2]=PORT_PCR_MUX(2);//LPUART0 RX.
}break;
default:{
}break;
}
}
SIM_EXTERN __inline void enableUART0Clock(void){
SIM->SOPT2=(SIM->SOPT2&(~SIM_SOPT2_LPUART0SRC_MASK))|SIM_SOPT2_LPUART0SRC(1);//select IRC48M.
SIM->SCGC5|=SIM_SCGC5_LPUART0_MASK;//enable clock.
}
void initUART(TYPE_E_UART uart,u32 baudrate){
switch(uart){
case UART_TYPE_U0:{
enableUART0Clock();
LPUART0->BAUD=(LPUART0->BAUD&~LPUART_BAUD_SBR_MASK)|LPUART_BAUD_SBR(3000000/baudrate);
LPUART0->CTRL=LPUART_CTRL_TE_MASK|LPUART_CTRL_RE_MASK|LPUART_CTRL_RIE_MASK;
NVIC_EnableIRQ(LPUART0_IRQn);
}break;
default:{
}break;
}
}
static void initCOM(TYPE_E_COM com,u32 baudrate){
switch(com){
case COM_TYPE_COM1:{
initUARTPin(UART_TYPE_U0);
initUART(UART_TYPE_U0,baudrate);
}break;
default:{
}break;
}
}
void sendByte(TYPE_E_COM com,char c){
switch(com){
case COM_TYPE_COM1:{
if(c=='\n'){
while(!(LPUART0->STAT&LPUART_STAT_TDRE_MASK));
COM1_BUF=0x0D;//CR(carriage return)
while(!(LPUART0->STAT&LPUART_STAT_TDRE_MASK));
COM1_BUF=0x0A;//LF(NL line feed,new line)
}else{
while(!(LPUART0->STAT&LPUART_STAT_TDRE_MASK));
COM1_BUF=c;//发送字符
}
}break;
default:{
}break;
}
}
void sendString(TYPE_E_COM com,char* str){
while((*str)!='\0'){
sendByte(com,*str);
str++;
}
}
void TaskCommunicate(void *p){
initCOM(COM_TYPE_COM1,115200);
sendString(COM_TYPE_COM1,"\nHello! Welcome to the Kinetis world~\n");
while(1){
OSTimeDly(100);
sendByte(COM_TYPE_COM1,0xBB);
}
}
这就是全部的代码了,执行效果:
呵呵,我也不知道0xBB 0xBB怎么解码成了 "换"- -.
上面的代码习惯是我最近养成的.用了很多小函数.
之前,不喜欢库,第一,名字复杂不知道怎么用.第二,感觉很笨.代码结构都不清晰了.
喜欢一个函数里面一堆寄存器,然后就OK了.
现在有了几种MCU的经验,有了点移植以及代码重复利用的概念,
觉得,函数还是比#define好.
刚写完发送,接收还没完成.
|
|