打印
[菜农助学交流]

tendence第四帖:UART读写

[复制链接]
1939|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tendence|  楼主 | 2011-11-19 14:52 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 tendence 于 2011-11-19 14:54 编辑

我的串口折腾了好久,之前久久显示不出来,看了sh007的帖子,发现把R5,R6焊掉之后就可以了,我也不是很清楚为什么。之前用的时候要先选中DTR然后再去掉,有的时候还不灵,怒了!!!
自从焊掉R5,R6之后腿不酸了,腰不疼了,吃啥啥香,玩啥啥爽,一口气爬5层楼,气都不喘一口……
接受部分用的查询方式,看三心大神的中断方式,实在没看懂,而且我觉得吧,发送完全没必要中断(如果我理解得不到位,欢迎指正)
接受部分用的中断,这个倒是很有必要,话不多说
翠花,上程序……
includes.h
//包含所有头文件
#include <stdio.h>
#include "NUC1xx.h"
#include "DrvUART.h"
#include "variables.h"
#include "hw_config.h"
#include "Driver\DrvGPIO.h"
#include "Driver\DrvSYS.h"

hw_config.c
//配置文件
 

#include "includes.h" //包含所需的头文件
uint8_t inchar[1];
uint8_t output1[]={"lease input a char\n"};
uint8_t output2[]={"The char you input is:"};
/*************************************************************************************
** Function name: Set_System
** Descriptions: 系统
** input parameters: 无
** output parameters: 无
** Returned value: 无
*************************************************************************************/
void RCC_Configuration(void);
void GPIO_Configuration( void);
void UART_Configuration(void );
void UART_INT_HANDLE(uint32_t );

void Set_System(void)
{
RCC_Configuration( ); //配置系统时钟

GPIO_Configuration( ); //配置GPIO

UART_Configuration( ); //配置UART
}



/*************************************************************************************
** Function name: RCC_Configuration
** Descriptions: 系统时钟源设置
** input parameters: none
** output parameters: none
** Returned value: none
*************************************************************************************/
void RCC_Configuration(void)
{
UNLOCKREG(); // 对写保护位操作时 需要一次向0x50000 0100写入 0x59,0x16,0x88,
DrvSYS_SetOscCtrl(E_SYS_XTL12M, 1);//与其 SYSCLK->WRCON.XTL12M_EN = 1; 等同
// PWRCON寄存器(这些寄存器在上电复位到用户解锁定之前是锁定的)除了 BIT[6]位其他位都受写保护
// 解除这些需要向 0x50000 0100写入 0x59,0x16,0x88 // 令PWRCON寄存器的BITP[0]为1(即设定12M外部晶振)
delay_ms(100); //while (DrvSYS_GetChipClockSourceStatus(E_SYS_XTL12M) != 1);//等待外部12MHZ晶振就绪
LOCKREG(); // 向“0x5000_0100”写入任何值,就可以重锁保护寄存器
}
/*************************************************************************************
** Function name: GPIO_Configuration
** Descriptions: 端口配置
** input parameters: none
** output parameters: none
** Returned value: none
*************************************************************************************/
void GPIO_Configuration()
{
// DrvGPIO_Open( E_GPA, 2, E_IO_OUTPUT );
// DrvGPIO_Open( E_GPA, 3, E_IO_OUTPUT );
// DrvGPIO_Open( E_GPA, 4, E_IO_OUTPUT );
//DrvGPIO_Open( E_GPA, 5, E_IO_OUTPUT );
}

/*************************************************************************************
** Function name: delay_ms
** Descriptions: 1ms(晶振为12MHZ)延时子程序
** input parameters: count
** output parameters: 无
** Returned value: 无
*************************************************************************************/
void UART_Configuration()
{
STR_UART_T param;

DrvSYS_SelectIPClockSource(E_SYS_UART_CLKSRC, 0); // 使能UART时钟
DrvGPIO_InitFunction(E_FUNC_UART0); // 复用功能引脚设置

param.u32BaudRate = 115200; // 波特率
param.u8cDataBits = DRVUART_DATABITS_8; // 数据位
param.u8cStopBits = DRVUART_STOPBITS_1; // 停止位
param.u8cParity = DRVUART_PARITY_NONE; // 校验位
param.u8cRxTriggerLevel = DRVUART_FIFO_1BYTES; // FIFO存储深度 1 字节
param.u8TimeOut = 0; // FIFO超时设定
DrvUART_Open(UART_PORT0, ¶m); // 串口开启、结构体整体赋值
DrvUART_EnableInt(UART_PORT0, DRVUART_RDAINT,UART_INT_HANDLE); //接收数据中断

}

void delay_ms(uint32_t count)
{
uint32_t i,j;
for(i=count;i>0;i--)
for(j=2395;j>0;j--);
}
void UART_INT_HANDLE(uint32_t u32IntStatus)
{
if(u32IntStatus & DRVUART_RDAINT)
{
/* Get all the input characters */
//DrvUART_Write(UART_PORT0,output1,sizeof(output1));
while(UART0->ISR.RDA_IF==1)
{
DrvUART_Read(UART_PORT0,inchar,1);
DrvUART_Write(UART_PORT0,output2,sizeof(output2));
delay_ms(50); /* 保存输入按键 */
DrvUART_Write(UART_PORT0,inchar,1);
delay_ms(50);
DrvUART_Write(UART_PORT0,"\n",1);
delay_ms(50);
DrvUART_Write(UART_PORT0,output1,sizeof(output1));
}
}
}

main.c
 
#include"includes.h"
uint8_t output3[]={"lease input a char\n"};
uint8_t show[]={"21ic test uart0!\n"};
int main (void)
{
Set_System();
    DrvUART_Write(UART_PORT0,show,sizeof(show));
delay_ms(500);
DrvUART_Write(UART_PORT0,output3,sizeof(output3));
delay_ms(500);
while(1)
{
  delay_ms(500);
};
}
工程文件 uart1.rar (648.32 KB)

相关帖子

沙发
tendence|  楼主 | 2011-11-19 14:58 | 只看该作者
有图有真相

使用特权

评论回复
板凳
hotpower| | 2011-11-19 15:33 | 只看该作者
有进步

使用特权

评论回复
地板
tendence|  楼主 | 2011-11-19 16:26 | 只看该作者
3# hotpower
其实我也是这么想的

使用特权

评论回复
5
tendence|  楼主 | 2011-11-19 22:23 | 只看该作者
谢谢菜农的裤子

使用特权

评论回复
6
sh007| | 2011-11-20 10:04 | 只看该作者
哈哈!恭喜LZ 一口气爬五楼了!

使用特权

评论回复
7
tendence|  楼主 | 2011-11-20 10:19 | 只看该作者
6# sh007
谢谢你的建议啊!拿掉了R5,R6

使用特权

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

本版积分规则

个人签名:把技术记在心里

1

主题

164

帖子

0

粉丝