英飞凌TC264学习(四)串口通信UART
串口部分的函数在LQ_UART.c中
TC264有四路UART中断,需要中断可以来配置中断,与外部中断一样,中断服务函数,中断号,优先级,不需要中断的话就不用配置,初始化之后就可以使用。
例子:
主函数:
int core0_main (void)
{
//char txt[16];
// 关闭CPU总中断
IfxCpu_disableInterrupts();
// 关闭看门狗,如果不设置看门狗喂狗需要关闭
IfxScuWdt_disableCpuWatchdog(IfxScuWdt_getCpuWatchdogPassword());
IfxScuWdt_disableSafetyWatchdog(IfxScuWdt_getSafetyWatchdogPassword());
// 读取总线频率
g_AppCpu0.info.pllFreq = IfxScuCcu_getPllFrequency();
g_AppCpu0.info.cpuFreq = IfxScuCcu_getCpuFrequency(IfxCpu_getCoreIndex());
g_AppCpu0.info.sysFreq = IfxScuCcu_getSpbFrequency();
g_AppCpu0.info.stmFreq = IfxStm_getFrequency(&MODULE_STM0);
// 按键初始化
GPIO_KEY_Init();
// LED灯所用P10.6和P10.5初始化
GPIO_LED_Init();
// 串口初始化,串口P14.0管脚输出,P14.1输入,波特率115200
UART_InitConfig(UART0_RX_P14_1,UART0_TX_P14_0, 115200);
// 开启CPU总中断
IfxCpu_enableInterrupts();
// 通知CPU1,CPU0初始化完成
IfxCpu_releaseMutex(&mutexCpu0InitIsOk);
// 切记CPU0,CPU1...不可以同时开启屏幕显示,否则冲突不显示
mutexCpu0TFTIsOk=0; // CPU1: 0占用/1释放 TFT
Test_ADC_7mic(); //PASS,测试ADC\UART0、STM延时和闪灯,通过UART0打印 AN0--AN7共8个通道ADC转换数据
while (1) //主循环
{
LED_Ctrl(LED0,RVS); //电平翻转,LED闪烁
delayms(100);
}
}
UART初始化函数:
/*************************************************************************
* 函数名称:void UART_InitConfig(UART_RX_t RxPin, UART_TX_t TxPin, unsigned long baudrate)
* 功能说明:串口模块初始化
* 参数说明:
* @param RxPin : 串口接收管脚
* @param TxPin : 串口发送管脚
* @param baudrate: 波特率
* 函数返回:字节
* 修改时间:2020年3月10日
* 备 注:UART_InitConfig(UART0_RX_P14_1,UART0_TX_P14_0, 115200); //初始化串口0 波特率 115200 无奇偶校验 1停止位 使用管脚P14_0 P14_1
*************************************************************************/
void UART_InitConfig(UART_RX_t RxPin, UART_TX_t TxPin, unsigned long baudrate)
{
//省略。。。
}
测试函数:
/*************************************************************************
* 函数名称:void Test_Beacon7mic(void)
* 功能说明:采集测试6+1麦克风阵列
* 参数说明:无
* 函数返回:无
* 修改时间:2020年3月10日
* 备 注: ADC悬空不为零
*************************************************************************/
void Test_ADC_7mic(void)
{
char txt[200];
unsigned int MICVmin[8];
ADC_InitConfig(ADC0, 80000); //初始化
ADC_InitConfig(ADC1, 80000); //初始化
ADC_InitConfig(ADC2, 80000); //初始化
ADC_InitConfig(ADC3, 80000); //初始化
ADC_InitConfig(ADC4, 80000); //初始化
ADC_InitConfig(ADC5, 80000); //初始化
ADC_InitConfig(ADC6, 80000); //初始化
ADC_InitConfig(ADC7, 80000); //初始化 如果使用龙邱母板 则测分压后的电池电压,具体可以看母板原理图
delayms(500); //延时等待
UART_PutStr(UART0,"\n-------------------------------------------------\n");//分界线
while(1)
{
MICVmin[0]=ADC_Read(ADC0);
MICVmin[1]=ADC_Read(ADC1);
MICVmin[2]=ADC_Read(ADC2);
MICVmin[3]=ADC_Read(ADC3);
MICVmin[4]=ADC_Read(ADC4);
MICVmin[5]=ADC_Read(ADC5);
MICVmin[6]=ADC_Read(ADC6);
MICVmin[7]=ADC_Read(ADC7);
//转换结果为字符串,串口发送或者屏幕显示
sprintf(txt,"[0]:%05d [1]:%05d [2]:%05d [3]:%05d [4]:%05d [5]:%05d [6]:%05d [7]:%05d \r\n",MICVmin[0],MICVmin[1],MICVmin[2],MICVmin[3],MICVmin[4],MICVmin[5],MICVmin[6],MICVmin[7]);
//串口发送到上位机
UART_PutStr(UART0,txt);//AN0--AN7十进制数据输出到上位机
LED_Ctrl(LED0,RVS); //电平翻转,LED闪烁
delayms(500); //延时等待
}
}
LQ_UART.c相关函数:
/*************************************************************************
* 函数名称:void UART_PutStr(UART_t uratn, char *str)
* 功能说明:UART发送字符串函数(遇 NULL 停止发送),使用前请先初始化对应串口
* 参数说明:uratn : UART0 - UART3/ str : 要打印的字符串地址
* 函数返回:无
* 修改时间:2020年3月10日
* 备 注:UART_PutStr(UART3, "123456789"); //发送9个字节
*************************************************************************/
void UART_PutStr(UART_t uratn, char *str)
{
while(*str)
{
UART_PutChar(uratn, *str++);
}
}
/*************************************************************************
* 函数名称:void UART_PutChar(UART_t uratn, char ch)
* 功能说明:UART发送字节函数,使用前请先初始化对应串口
* 参数说明:uratn : UART0 - UART3/ ch : 要打印的字符
* 函数返回:无
* 修改时间:2020年3月10日
* 备 注:UART_PutChar(UART0, 'a'); //打印字符a
*************************************************************************/
void UART_PutChar(UART_t uratn, char ch)
{
IfxAsclin_Asc_blockingWrite(&g_UartConfig[uratn], ch);
}