完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
项目需要同时使用UART0,和tiME0,TIME2。UART0已经使用了TIME1自动重载定时器。在单独使用UART0的示例代码的时候是可以的,但是加上TIME0后,发现UART0就失效了。
#include ".PublicCH554.H" #include ".PublicDebug.H" #include ".PublicTimer.H" #include "stdio.h" #include #pragma NOAREGS UINT8 dat = 2; UINT8 flag = 0; void UART0Interrupt( void ) interrupt INT_NO_UART0 { if(RI) { dat = SBUF; CH554UART0SendByte(dat); RI = 0; flag = 1; } } void initTime( void ) { mTimer0Clk12DivFsys(); //T0定时器时钟设置 mTimer_x_ModInit(0,2); //T0 定时器模式设置 mTimer_x_SetData(0,0x5555); //T0定时器赋值 mTimer0RunCTL(1); //T0定时器启动 ET0 = 1; //T0定时器中断开启 EA = 1; } void main( ) { CfgFsys( ); //CH554时钟选择配置 mDelaymS(20); mInitSTDIO( ); initTime(); while(1) { if(flag) { flag = 0; } mDelaymS(100); } } void mInitSTDIO( ) { UINT32 x; UINT8 x2; SM0 = 0; SM1 = 1; SM2 = 0; //串口0使用模式1 //使用Timer1作为波特率发生器 RCLK = 0; //UART0接收时钟 TCLK = 0; //UART0发送时钟 PCON |= SMOD; x = 10 * FREQ_SYS / UART0_BUAD / 16; //如果更改主频,注意x的值不要溢出 x2 = x % 10; x /= 10; if ( x2 >= 5 ) x ++; //四舍五入 TMOD = TMOD & ~ bT1_GATE & ~ bT1_CT & ~ MASK_T1_MOD | bT1_M1; //0X20,Timer1作为8位自动重载定时器 T2MOD = T2MOD | bTMR_CLK | bT1_CLK; //Timer1时钟选择 TH1 = 0-x; //12MHz晶振,buad/12为实际需设置波特率 TR1 = 1; //启动定时器1 //TI = 1; REN = 1; //串口0接收使能 EA=1;//全局中断使能控制位,该位为 1 并且 E_DIS 为 0 则允许中断;该位为 0 屏蔽所有中断请求 ES=1; //异步串口 0 中断使能位,该位为 1 允许 UART0 中断;为 0 屏蔽 } 请问我能不能同时使用uart0 和 time0 time2,为什么UART同时使用时会失效? |
|
相关推荐
1个回答
|
|
解决了:定时器工作在不同的方式就可以了。
|
|
|
|
只有小组成员才能发言,加入小组>>
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
2616 浏览 2 评论
2145 浏览 1 评论
ch554g的板子准备烧录程序,用串口总是显示等待设备连接是为啥
1022浏览 14评论
请问ch32v307用ch-link调试或者读写有什么特殊操作方法吗?
919浏览 13评论
Windows系统下如何确定COM口为CH340/CH341设备?
2257浏览 12评论
695浏览 12评论
CH32V307以太网接近满速后,几秒或几十秒后就死机怎么解决?
1989浏览 11评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-5-15 11:44 , Processed in 0.770806 second(s), Total 76, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号