打印
[菜农助学交流]

UART--printf打印counter计数

[复制链接]
3634|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 tao560532 于 2011-12-3 19:20 编辑

串口通信UART

以前玩的最熟的就是串口了,在51里只要设置好波特率,直接往SBUF赋值就可以发送了,

然后接收数据就是查询RI位,当至高时就进入串口服务函数读取SBUF中的数据,
现在看看M0中的UART是怎么回事,首先看看芯片手册:


图中说120提供3个通道,现在对产品规格还不是很清楚。

在规格说明书里就清楚明白的显示了这款芯片所有的资源。


有关于串口的一些配置就看手册,
串口的参数主要有:波特率,数据位,停止位,校验位,当然在M0还有FIFO存储深度,还有超时设定。

/***************************************************************************************
* File Name : UART_KEY_TIME.c
* Copyright : 2011-2011 ecjtu Corporation,All Rights Reserved
* Module Name : UART_KEY_TIME
*
* CPU : Cortex-M0
* RTOS : NO
* Create Date : 2011/12/02
* Author/Corporation : 涛行天下/华东交通大学
*
* Abstract Description : 串口通信,按键
*---------------------------Revision History--------------------------------
* Revision History
* No. Version Date Revised by Item Description
* 1 V0.0 11.12.02 涛行天下 ... ....
***************************************************************************************/
/*
利用定时器对1秒时间内KEY2键的操作情况进行检测,
并通过串口将测试结果传给PC
*/

#include <stdio.h>
#include "NUC1xx.h"
#include "DrvGPIO.h"
#include "DrvSYS.h"
#include "DrvUART.h"
///////////////////////////////////////////////////////
uint8_t test ;
uint8_t inchar[1];
uint32_t TimerCOUN=0;


/***************************************************************************************
* Function Name : TMR0_IRQHandler
* Create Date : 2011/12/02
* Author/Corporation : your name/your company name
*
* Description : Find a proper thread in thread array
*
* Param : ThreadNo : someParam description
ThreadStaus : someParam description
*
*
* Return Code : Return Code description
eg:
ERROR_Fail : not find a thread
ERROR_SUCCEED : found
* Global Variable : DISP_wuiSegmentAppID
* File Static Variable : naucThreadNo
* Function Static Variable : None
*
*----------------------------------------------------
* Revision History
* No. Date Revised by Item Description
* V0.5 2011/12/02 涛行天下 ... ....
***************************************************************************************/
void TMR0_IRQHandler(void) // Timer0 interrupt subroutine
{
TIMER0->TISR.TIF =1;
TimerCOUN++;
if(test)
{
if( TimerCOUN&0x0020 )
DrvGPIO_SetBit(E_GPA,5);
else
DrvGPIO_ClrBit(E_GPA,5);
}
}


void UART_INT_HANDLE(uint32_t u32IntStatus)
{
if(u32IntStatus & DRVUART_RDAINT)
{
/* Get all the input characters */
while(UART0->ISR.RDA_IF==1)
{

DrvUART_Read(UART_PORT0,inchar,1); /* 保存输入按键 */

}
}
}

void delay()
{
uint32_t i;
for(i=80000;i;i--);
}

void delay_1s()
{
uint32_t i;
for(i = 0; i < 200; i++)
{
DrvSYS_Delay(1000);
}
}

int main (void)
{
uint8_t count;
uint32_t counter;//计数输出
uint32_t loop=1;
STR_UART_T param; //串口参数

UNLOCKREG(); //解除锁定寄存器
DrvSYS_SetOscCtrl(E_SYS_XTL12M, 1); //SYSCLK->WRCON.XTL12M_EN = 1;
DrvSYS_Delay(5000);
LOCKREG(); //重新锁定寄存器

DrvSYS_SelectIPClockSource(E_SYS_UART_CLKSRC,0); //使能UART时钟 UART时钟源选择. 00 =外部12MHz 晶振
DrvGPIO_InitFunction(E_FUNC_UART0); //GPB_MFP0-1-2-3置位 GPIO使能UART功能

param.u32BaudRate = 115200; //波特率为115200
param.u8cDataBits = DRVUART_DATABITS_8; //数据位8
param.u8cStopBits = DRVUART_STOPBITS_1; //停止位 1
param.u8cParity = DRVUART_PARITY_NONE; //校验位 无
param.u8cRxTriggerLevel = DRVUART_FIFO_1BYTES; //FIFO存储深度 1 字节
param.u8TimeOut = 0; //FIFO超时设定

if(DrvUART_Open(UART_PORT0,¶m) != E_SUCCESS) // 串口开启、结构体整体赋值
printf("串口0打开失败!\n");

DrvUART_EnableInt(UART_PORT0, DRVUART_RDAINT,UART_INT_HANDLE); //使能接收数据中断,回调函数 UART_INT_HANDLE

/*---------------------------------------------------------------------------------------------------------------------*/



/*设置IO口都是输出状态*/
DrvGPIO_Open( E_GPA, 2, E_IO_OUTPUT ); //led端口设置为输出
DrvGPIO_Open( E_GPA, 3, E_IO_OUTPUT );
DrvGPIO_Open( E_GPA, 4, E_IO_OUTPUT );
DrvGPIO_Open( E_GPA, 5, E_IO_OUTPUT );

DrvGPIO_Open( E_GPB, 14, E_IO_INPUT ); //按键端口设置为输入
DrvGPIO_Open( E_GPB, 15, E_IO_INPUT );


DrvGPIO_ClrBit( E_GPA, 2 ); //程序运行指示
DrvGPIO_ClrBit( E_GPA, 3 );
DrvGPIO_ClrBit( E_GPA, 4 );
DrvGPIO_ClrBit( E_GPA, 5 );

while(1)
{
printf("Counter:\n %d",counter);
counter += 1;
delay_1s();
}
}

相关帖子

沙发
hotpower| | 2011-12-3 19:26 | 只看该作者
库函数效率确实太低下了,不过学习是很不错的。

使用特权

评论回复
板凳
tao560532|  楼主 | 2011-12-3 21:10 | 只看该作者
恩,下次找内部寄存器设置的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:技术源于积累,成功源于执着!

31

主题

366

帖子

1

粉丝