⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 k60-keil

📁 K60-Keil版本(下载安装MDK4.23)
💻
字号:
/*============================================================================
文件名称: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 + -