栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

S32K144:3.串口实验

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

S32K144:3.串口实验

头文件:

#ifndef UART_H
#define UART_H


#include "S32K144.h"


#define PCC_UART1_CLK_SRC 		((uint32_t)0x01<<24) 
#define MY_LPUART_CTRL_RIE 		((uint32_t)0x01<<21) 


void LPUART1_Init(void);
void IPUART1_transmit_char(int8_t send);
void LPUART1_trans_string(char data_string[]);
char LPUART1_receive_char(void);
void LPUART_recieve_and_echo_char(void);

#endif


C文件:



#include "uart.h"


void LPUART1_PORT_Init(void)
{
	PCC->PCCn[PCC_PORTC_INDEX] |= PCC_PCCn_CGC_MASK; 
    PORTC->PCR[6] |= (uint32_t)0x02<<8; 
    PORTC->PCR[7] |= (uint32_t)0x02<<8; 
}


void LPUART1_Init(void)
{
	PCC->PCCn[PCC_LPUART1_INDEX] = ~PCC_PCCn_CGC_MASK; 
    PCC->PCCn[PCC_LPUART1_INDEX] |= PCC_UART1_CLK_SRC 
    		                     |  PCC_PCCn_CGC_MASK; 
    LPUART1->BAUD = 0x0E000034; 
    							
                                
                                
    							
                            	
                                
    							
                                
                                
#if (LPUART1_RX_ITEN == 1)
    LPUART1->CTRL = 0x000C0000 | MY_LPUART_CTRL_RIE;

#else
    LPUART1->CTRL = 0x000C0000; 
    							
    							
                                
                                
                                
    							
                                
                                
#endif
}


void S32_NVIC_EableIRQ(IRQn_Type IRQn, uint8_t Priority)
{
	S32_NVIC->ISER[(uint32_t)((uint32_t)IRQn>>5)] = (uint32_t)(0x01 << (((uint32_t)IRQn) & ((uint32_t)0x1F))); 
	S32_NVIC->IP[IRQn] = (uint8_t)Priority<<4; 
}

void LPUART1_Config(void)
{
	LPUART1_PORT_Init();
	LPUART1_Init();
#if (LPUART1_RX_ITEN == 1)
	S32_NVIC_EableIRQ(LPUART1_RxTx_IRQn,1); 
#endif
}


void IPUART1_transmit_char(int8_t send)
{
	while(((LPUART1->STAT & LPUART_STAT_TDRE_MASK)>>LPUART_STAT_TDRE_SHIFT) == 0);
                                 
	LPUART1->DATA = send;        
}


void LPUART1_trans_string(char data_string[])
{
	uint32_t i;
	while(data_string[i] != ''){
		IPUART1_transmit_char(data_string[i]); 
		i++;
	}
}


char LPUART1_receive_char(void)
{
	char recieve;
	while(((LPUART1->STAT & LPUART_STAT_RDRF_MASK)>>LPUART_STAT_RDRF_SHIFT) == 0);
                                   
	recieve = LPUART1->DATA;       
	return recieve;
}


void LPUART_recieve_and_echo_char(void)
{
	char send = LPUART1_receive_char(); 
	IPUART1_transmit_char(send);
	IPUART1_transmit_char('n'); 
	IPUART1_transmit_char('r'); 
}

int8_t recieve_mes;
void LPUART1_RxTx_IRQHandler(void)
{
	if(((LPUART1->STAT & LPUART_STAT_RDRF_MASK)>>LPUART_STAT_RDRF_SHIFT) == 1) 
	{
		recieve_mes = LPUART1->DATA; 
	}
}



main函数:



#include "S32K144.h"
#include "clocks_and_modes.h"
#include "led.h"
#include "key.h"
#include "exit.h"
#include "uart.h"

void Dleay_us(uint32_t delay_us)
{
	volatile uint32_t num;
	volatile uint32_t t;

	for(num = 0; num < delay_us; num++)
	{
		t = 11;
		while(t){
			t--;
		}
	}
}


void Dleay_ms(uint16_t delay_ms)
{
	volatile uint32_t num;
	for(num = 0; num < delay_ms; num++)
	{
		Dleay_us(1000);
	}
}

int main(void)
{
	My_Sysclock_Config(); 
	LPUART1_Init(); 
    while(1)
    {
    	LPUART_recieve_and_echo_char(); 
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/311657.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号