金牌会员
观星客
- 积分
- 2235
- 威望
- 1054
- 贡献
- 679
- 兑换币
- 573
- 注册时间
- 2012-7-24
- 在线时间
- 251 小时
|
我用的是龙丘的代码,PTD6接串口模块的RX,PTD7接串口模块的TX,芯片的地和串口模块接一起,串口模块外接5V和地,线是接好的,但试了很久上位机都没反应。串口驱动之类的是装好的,也选对COM口了。还可能有什么原因呢?求指导~
补充内容 (2013-2-20 17:52):
//全局变量声明
extern int periph_clk_khz;
//主函数
void main(void)
{
//1 主程序使用的变量定义
uint32 runcount; //运行计数器
uint8 ch;
//2 关中断
DisableInterrupts; //禁止总中断
//3 模块初始化
light_init(Light_Run_PORT,Light_Run1,Light_OFF); //指示灯初始化
uart_init (UART0,periph_clk_khz,9600); //串口初始化
//4 开中断
uart_sendN(UART0,(uint8*)"Hello World!",12);
//主循环
while(1)
{
//1 主循环计数到一定的值,使小灯的亮、暗状态切换
runcount++;
if(runcount>=10)
{
light_change(Light_Run_PORT,Light_Run1);//指示灯的亮、暗状态切换
runcount=0;
}
//2 串口接收一个字节的数据
if(uart_reN(UART0,&ch,1))
{
uart_send1(UART0,ch); //发送回去
}
}
}
补充内容 (2013-2-20 17:53):
//-------------------------------------------------------------------------*
//函数名: uart_init *
//功 能: 初始化uartx模块。 *
//参 数: uartch:串口号 *
// sysclk:系统总线时钟,以MHz为单位 *
// baud:波特率,如9600,38400等,一般来说,速度越慢,通信越稳 *
//返 回: 无 *
//说 明: *
//-------------------------------------------------------------------------*
void uart_init (UART_MemMapPtr uartch, uint32 sysclk, uint32 baud)
{
register uint16 sbr, brfa;
uint8 temp;
//使能引脚
if (uartch == UART0_BASE_PTR)
{
//在PTD6上使能UART0_TXD功能
PORTD_PCR6 = PORT_PCR_MUX(0x3);
//在PTD7上使能UART0_RXD
PORTD_PCR7 = PORT_PCR_MUX(0x3);
}else if (uartch == UART1_BASE_PTR)
{
//在PTC4上使能UART1_TXD功能
PORTC_PCR4 = PORT_PCR_MUX(0x3);
//在PTC3上使能UART1_RXD
PORTC_PCR3 = PORT_PCR_MUX(0x3);
}else if (uartch == UART2_BASE_PTR)
{
//在PTD3上使能UART2_TXD功能
PORTD_PCR3 = PORT_PCR_MUX(0x3);
//在PTD2上使能UART2_RXD
PORTD_PCR2 = PORT_PCR_MUX(0x3);
}else if (uartch == UART3_BASE_PTR)
{
//在PTC17上使能UART3_TXD功能
PORTC_PCR17 = PORT_PCR_MUX(0x3);
//在PTC16上使能UART3_RXD
PORTC_PCR16 = PORT_PCR_MUX(0x3);
}else if (uartch == UART4_BASE_PTR)
{
//在PTE24上使能UART4_TXD功能
PORTE_PCR24 = PORT_PCR_MUX(0x3);
//在PTE25上使能UART4_RXD
PORTE_PCR25 = PORT_PCR_MUX(0x3);
}else if (uartch == UART5_BASE_PTR)
{
//在PTE8上使能UART5_TXD功能
PORTE_PCR8 = PORT_PCR_MUX(0x3);
//在PTE9上使能UART5_RXD
PORTE_PCR9 = PORT_PCR_MUX(0x3);
}
//使能串口时钟
if(uartch == UART0_BASE_PTR)
SIM_SCGC4 |= SIM_SCGC4_UART0_MASK;
else
if (uartch == UART1_BASE_PTR)
SIM_SCGC4 |= SIM_SCGC4_UART1_MASK;
else
if (uartch == UART2_BASE_PTR)
SIM_SCGC4 |= SIM_SCGC4_UART2_MASK;
else
if(uartch == UART3_BASE_PTR)
SIM_SCGC4 |= SIM_SCGC4_UART3_MASK;
else
if(uartch == UART4_BASE_PTR)
SIM_SCGC1 |= SIM_SCGC1_UART4_MASK;
else
SIM_SCGC1 |= SIM_SCGC1_UART5_MASK;
//禁止发送接受
UART_C2_REG(uartch) &= ~(UART_C2_TE_MASK
| UART_C2_RE_MASK );
//配置成8位无校验模式
UART_C1_REG(uartch) = 0;
//计算波特率,串口0、1使用内核时钟,其它串口使用外设时钟,系统时钟为
//外设时钟的2倍
if ((uartch == UART0_BASE_PTR) | (uartch == UART1_BASE_PTR))//
sysclk+=sysclk;
sbr = (uint16)((sysclk*1000)/(baud * 16));
temp = UART_BDH_REG(uartch) & ~(UART_BDH_SBR(0x1F));
UART_BDH_REG(uartch) = temp | UART_BDH_SBR(((sbr & 0x1F00) >> 8));
UART_BDL_REG(uartch) = (uint8)(sbr & UART_BDL_SBR_MASK);
brfa = (((sysclk*32000)/(baud * 16)) - (sbr * 32));
temp = UART_C4_REG(uartch) & ~(UART_C4_BRFA(0x1F));
UART_C4_REG(uartch) = temp | UART_C4_BRFA(brfa);
//使能发送接受
UART_C2_REG(uartch) |= (UART_C2_TE_MASK
| UART_C2_RE_MASK );
}
|
|