📄 k60-keil
字号:
/*============================================================================
文件名称:Serial.c
功能概要:K60 Serial
版权所有:卿丞数码
=============================================================================*/
#include <MK60N512MD100.h> /* MK60N512MD100 Definitions */
#include "Serial.h"
#include "pwm.h"
extern uint8_t SerialFlag;
/*============================================================================
函数名称:Serial_Init
函数返回:无
参数说明:UART_Channel:UART0-UART5 Peripheral_Clock:外设时钟、单位hz baud:波特率
功能概要:初始化串口模块设定。
=============================================================================*/
void Serial_Init(UART_Type *UART_Channel,uint32_t Peripheral_Clock, uint32_t baud )
{
uint16_t sbr,brfa;
if(UART_Channel==UART0)
{
SIM->SCGC4 |= SIM_SCGC4_UART0_MASK; /* Enable UART 3 gate clocking */
SIM->SCGC5 |= SIM_SCGC5_PORTD_MASK; /* Enable PORTC gate clocking */
PORTD->PCR[6] |= PORT_PCR_MUX(3); /* Pin mux configured as ALT3 PTD6上使能UART0_TXD */
PORTD->PCR[7] |= PORT_PCR_MUX(3); /* Pin mux configured as ALT3 PTD7上使能UART0_RXD */
}
else if(UART_Channel==UART1)
{
SIM->SCGC4 |= SIM_SCGC4_UART1_MASK; /* Enable UART 3 gate clocking */
SIM->SCGC5 |= SIM_SCGC5_PORTC_MASK; /* Enable PORTC gate clocking */
PORTC->PCR[4] |= PORT_PCR_MUX(3); /* Pin mux configured as ALT3 */
PORTC->PCR[3] |= PORT_PCR_MUX(3); /* Pin mux configured as ALT3 */
}
else if(UART_Channel==UART2)
{
SIM->SCGC4 |= SIM_SCGC4_UART2_MASK; /* Enable UART 3 gate clocking */
SIM->SCGC5 |= SIM_SCGC5_PORTD_MASK; /* Enable PORTC gate clocking */
PORTD->PCR[3] |= PORT_PCR_MUX(3); /* Pin mux configured as ALT3 */
PORTD->PCR[2] |= PORT_PCR_MUX(3); /* Pin mux configured as ALT3 */
}
else if(UART_Channel==UART3)
{
SIM->SCGC4 |= SIM_SCGC4_UART3_MASK; /* Enable UART 3 gate clocking */
SIM->SCGC5 |= SIM_SCGC5_PORTC_MASK; /* Enable PORTC gate clocking */
PORTC->PCR[17] |= PORT_PCR_MUX(3); /* Pin mux configured as ALT3 */
PORTC->PCR[16] |= PORT_PCR_MUX(3); /* Pin mux configured as ALT3 */
}
else if(UART_Channel==UART4)
{
SIM->SCGC1 |= SIM_SCGC1_UART4_MASK; /* Enable UART 3 gate clocking */
SIM->SCGC5 |= SIM_SCGC5_PORTE_MASK; /* Enable PORTC gate clocking */
PORTE->PCR[24] |= PORT_PCR_MUX(3); /* Pin mux configured as ALT3 */
PORTE->PCR[25] |= PORT_PCR_MUX(3); /* Pin mux configured as ALT3 */
}
else if(UART_Channel==UART5)
{
SIM->SCGC1 |= SIM_SCGC1_UART5_MASK; /* Enable UART 3 gate clocking */
SIM->SCGC5 |= SIM_SCGC5_PORTE_MASK; /* Enable PORTC gate clocking */
PORTE->PCR[8] |= PORT_PCR_MUX(3); /* Pin mux configured as ALT3 */
PORTE->PCR[9] |= PORT_PCR_MUX(3); /* Pin mux configured as ALT3 */
}
if(UART_Channel==UART0||UART_Channel==UART1)Peripheral_Clock=Peripheral_Clock*2; // UART0 UART1 使用system clock
brfa=UART_Channel->C4 = 1; //UART baud rate = UART module clock / (16 × (SBR[12:0] + BRFD)) BRFD=BRFA/32.0;
sbr=((Peripheral_Clock*1.0/baud-(brfa/32.0))/16.0);
UART_Channel->BDH|=(sbr>>8);
UART_Channel->BDL=(uint8_t)(sbr&0x00ff);
UART_Channel->C1=0; //默认配置成8位无校验模式
UART_Channel->C2 |= UART_C2_RE_MASK; /* Receiver enable */
UART_Channel->C2 |= UART_C2_TE_MASK; /* Transmitter enable */
UART_Channel->RWFIFO = UART_RWFIFO_RXWATER(1);
UART_Channel->TWFIFO = UART_TWFIFO_TXWATER(0);
}
/*============================================================================
函数名称:Ser_PutChar
函数返回:无
参数说明:UART_Channel:UART0-UART5 ch:发送的字节
功能概要:串口发送单字节。
=============================================================================*/
void Ser_PutChar(UART_Type *UART_Channel,uint32_t ch)
{
while (!(UART_Channel->S1 & UART_S1_TDRE_MASK));
UART_Channel->D = (ch & 0xFF);
}
/*============================================================================
函数名称:Ser_PutString
函数返回:无
参数说明:UART_Channel:UART0-UART5 buff:发送的字符串数组
功能概要:串口发送字符串。
=============================================================================*/
void Ser_PutString(UART_Type *UART_Channel,int8_t *buff)
{
while(*buff!='\0')
Ser_PutChar(UART_Channel,*buff++);
}
/*============================================================================
函数名称:Ser_PutNString
函数返回:无
参数说明:UART_Channel:UART0-UART5 buff:发送的字符串数组 len:字符串数组长度
功能概要:串口发送定长的字符串。
=============================================================================*/
void Ser_PutNString(UART_Type *UART_Channel,int8_t *buff,uint32_t len)
{
uint16_t i;
for(i=0;i<len;i++)
{
Ser_PutChar(UART_Channel,buff[i]);
}
}
void Ser_PutImageString(UART_Type *UART_Channel,int8_t *buff,uint32_t len)
{
uint16_t i;
for(i=0;i<len;i++)
{
if(buff[i]==0x01)buff[i]=0x02;
Ser_PutChar(UART_Channel,buff[i]);
}
}
/*============================================================================
函数名称:Ser_GetChar
函数返回:接收到的字节
参数说明:UART_Channel:UART0-UART5
功能概要:串口接收单字节。
=============================================================================*/
uint32_t Ser_GetChar(UART_Type *UART_Channel)
{
if (UART_Channel->S1 & UART_S1_RDRF_MASK)
{
return (UART_Channel->D);
}
else
return 0;
}
/*-----------------------------------------------------------------------------
* End of file
*----------------------------------------------------------------------------*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -