瑞萨M30290FA单片机串口问题,请瑞萨工程师帮忙解决,急!
关键词: 瑞萨 M30290FA 单片机 串口 问题 请瑞
希望您能发一个完整的工程文件过来。
我已经给您留言,里面有我们工程师的邮件地址。
头文件是您自己作的?可以在瑞萨网站M16C/29的网页里下载。
一般情况下是设定可能存在问题。
/***********************************************************************/
/* */
/* FILE :uart.c */
/* DATE :Thu, May 27, 2008 */
/* DESCRIPTION :uart program file. */
/* CPU GROUP :M30290 */
/* by :liufeng */
/* */
/* */
/***********************************************************************/
#include "sfr_M16C29config.h"
void delay(void);
void clock_initial(void);
void uarttx_initial(void);
void uartrx_initial(void);
void port_initial(void);
void main(void)
{
clock_initial();
port_initial();
uarttx_initial();
//uartrx_initial();
asm("NOP");
asm("NOP");
}
void clock_initial(void) //时钟初始化配置
{
unsigned char i;
prc1 = 1;
pm20 = 0;
prc1 = 0;
prc0 = 1; //允许写时钟
prc2 = 1;
pacr=0x03; //80引脚版本
prc1 = 1; // Enable write to PM0,PM1,PM2,TB2SC,INVC0 and INVC1 registers
pm21 = 0; // System clock protective bit
cm10=0;cm05=0;
for(i=0; i<10; i++);
cm15=1; //High drive capacity selected(cm1 bit 5)
cm07=0;cm21=0;cm11=0; //Main clock selected(cm0 bit 7,cm1 bit1,cm2 bit 1)
cm16=0;cm17=0;cm06=1; //CPU clock divide by 8 selected(cm0 bit 6, cm1 bit 6 and 7)
pclk5=0;cm01=0;cm00=0; //CLKout pin function as normal I/O port P90(pclkr bit 5,cm0 bit 0 and 1)
prc0 = 1;
pclk1 = 1; //f1SIO set
prc0 = 0; //写时钟保护, 系统时钟8分频
}
void uarttx_initial(void) //串口发送
{
unsigned int trans_data; //发送REG
trans_data = 0x0011;
u0brg = 0x81;
ucon = 0x00;
u0c0 = 0x30;
u0c1 = 0x00;
u0mr = 0x05;
u0tb = trans_data;
u0c1 = 0x05;
trans_data = ucon;
trans_data = u0c0;
trans_data = u0c1;
trans_data = u0tb;
trans_data = u0c1;
/*
clk0_u0c0=0;
clk1_u0c0=0;
u0brg = 0x81;
u0mr = 0x05;
te_u0c1=0;
re_u0c1=0;
clk0_u0c0=0;
clk1_u0c0=0;
asm("NOP");
u0brg = 0x00; // Setting UART0 bit rate generator (Approx 9600bps @20MHz f1)必须在U0C0后
crd_u0c0 = 1; //禁止CTS RTS
ucon = 0x01;
u0tb = trans_data;
u0brg = 0x81;
te_u0c1=1;
re_u0c1=1;
u0brg = 0x81;
u1brg = 0x81;
ti_u0c1 = 0;
*/
while (1)
{
p9_0 = 1;
u0tb = trans_data;
while (ti_u1c1 == 0); //Wait for transmission buffer emty
u0tb = trans_data; // Set transmission data
te_u1c1 = 1; // Transmission enabled
p9_0 = 0;
trans_data++;
}
}
void uartrx_initial(void) //串口接收
{
unsigned int recevie_data; //接收REG
pd6_1 = 0;
pd6_2 = 0; //RXD direction bit
pd6_3 = 1; //TXD direction bit
u0mr = 0x05;
u0c0 = 0x00;
u0brg = 0x81; /* Setting UART0 bit rate generator (Approx 9600bps @20MHz f1)必须在U0C0后 */
ucon = 0x00;
u0c1 = 0x05;
while (1)
{
while (!ri_u0c1)
{
;
}
recevie_data = u0rb;
asm("NOP");
asm("NOP");
}
}
void delay(void) //p9_0 LED delay
{
unsigned int j,k;
j = 0;
k = 0;
for (;j<3000;j++);
for (;k<6000;k++);
}
void port_initial(void)
{
prc2 = 1; // Enable write to PD9,PACR and S4C registers
pd9_0 = 1; //P9 direction bit
pd6_1 = 0; // CLK direction bit
pd6_2 = 0; //RXD direction bit
pd6_3 = 1; //TXD direction bit
}
u0brg = 0x81;
ucon = 0x00;
u0c0 = 0x30;
u0c1 = 0x00;
u0mr = 0x05;
u0tb = trans_data;
u0c1 = 0x05;
这一段有问题,寄存器设定顺序不对,正确的是
u0mr, u0c0, u0brg, u0c1
u0c1=0x05; //启动发送和接收
while(ti_u0c1==0); //等待发送缓冲寄存器空
u0tb=trans_data; //发送数据,这样数据就发出去了
http://documentation.renesas.com/eng/products/mpumcu/apn/rej05b0624_m16cap.pdf
UART接口数据的应用笔记
http://documentation.renesas.com/eng/products/mpumcu/apn/rej05b0625_m16cap.pdf
也可以参考
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
每周了解几个硬件知识+buckboost电路(五)被打赏10分 | |
【换取逻辑分析仪】RA8 PMU 模块功能寄存器功能说明被打赏20分 | |
野火启明6M5适配SPI被打赏20分 | |
NUCLEO-U083RC学习历程2-串口输出测试被打赏20分 | |
【笔记】STM32CUBEIDE的Noruletomaketarget编译问题被打赏50分 | |
【换取逻辑分析仪】RA8使用perfcounter coremark跑分试验被打赏34分 | |
【换取逻辑分析仪】RA8使用perfcount计算freertos任务CPU使用率被打赏38分 | |
【换取逻辑分析仪】RA8使用RA smart 工具配置运行Freertos被打赏27分 | |
【换取逻辑分析仪】RA8 IAR 环境下Debug异常解析被打赏45分 | |
【笔记】visit内存数据异常问题被打赏50分 |