完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我将P3端口的一个引脚设置成了推挽输出 串口UART0接收不能用了 是什么原因?
和 bPN_OC 有关吗 我的程序用的UART0例程 就是添加了GPIO例程中 CH559GPIOModeSelt 函数 main函数中调用了一下 CH559GPIOModeSelt(3,2,3); UART0接收不能用了 是需要改一下其他东西吗 求教一下 /********************************** (C) COPYRIGHT ******************************* * File Name : UART0.C * Author : WCH * Version : V1.3 * Date : 2016/06/24 * Description : CH559 串口0自发自收演示 (1)、串口0收发数据,波特率可调; *******************************************************************************/ #include "..DEBUG.C" //调试信息打印 #include "..DEBUG.H" #pragma NOAREGS UINT8 DAT,FLAG; /******************************************************************************* * Function Name : CH559UART0Interrupt() * Description : CH559UART0中断处理函数 *******************************************************************************/ void CH559UART0Interrupt( ) interrupt INT_NO_UART0 using 1 //看门狗中断服务程序,使用寄存器组1 { if(TI) { TI = 0; //清空发送中断 } if(RI) { FLAG = 1; RI = 0; //清空接收中断 DAT = SBUF; } } /******************************************************************************* * Function Name : CH559GPIODrivCap(UINT8 Port,UINT8 Cap) * Description : 端口0、1、2、3驱动能力设置 * Input : UINT8 Port端口选择(0、1、2、3) UINT8 Cap驱动能力选择((0)5mA、(1)20mA(注意:P1口是10mA)) * Output : None * Return : SUCCESS成功 FAIL失败 *******************************************************************************/ UINT8 CH559GPIODrivCap(UINT8 Port,UINT8 Cap) { if(Port >= 4){ return FAIL; } if(Cap == 0){ //驱动电流最大5mA PORT_CFG &= ~(bP0_DRV << Port); } else{ PORT_CFG |= (bP0_DRV << Port); //驱动电流最大20mA } return SUCCESS; } /******************************************************************************* * Function Name : CH559GPIOModeSelt(UINT8 Port,UINT8 Mode,UINT8 PinNum) * Description : 端口0、1、2、3引脚模式设置 * Input : UINT8 Port端口选择(0、1、2、3) UINT8 Cap驱动方式选择(bPn_OC & Pn_DIR & Pn_PU) 0(000):仅输入,无上拉; 1(001):仅输入,带上拉; 2(01x):推挽输出,高低电平强驱动; 3(100):开漏输出,无上拉,支持输入; 4(110):开漏输出,无上拉,当转变输出由低到高时,仅驱动2个时钟的高电平 5(101):准双向(标准51模式),开漏输出,带上拉 6(111):准双向(标准51模式),开漏输出,带上拉,当转变输出由低到高时,仅驱动2个时钟的高电平 UINT8 PinNum(引脚选择0-7) * Output : None * Return : SUCCESS成功 FAIL失败 *******************************************************************************/ UINT8 CH559GPIOModeSelt(UINT8 Port,UINT8 Mode,UINT8 PinNum) { UINT8 Pn_DIR,Pn_PU; if(Port >= 4){ return FAIL; } switch (Mode){ case 0: //仅输入,无上拉 PORT_CFG &= ~(bP0_OC << Port); Pn_DIR &= ~(1< Pn_PU &= ~(1< break; case 1: //仅输入,带上拉 PORT_CFG &= ~(bP0_OC << Port); Pn_DIR &= ~(1< Pn_PU |= 1< break; case 2: //推挽输出,高低电平强驱动 PORT_CFG &= ~(bP0_OC << Port); Pn_DIR |= ~(1< break; case 3: //开漏输出,无上拉,支持输入 PORT_CFG |= (bP0_OC << Port); Pn_DIR &= ~(1< Pn_PU &= ~(1< break; case 4: //开漏输出,无上拉,当转变输出由低到高时,仅驱动2个时钟的高电平 PORT_CFG |= (bP0_OC << Port); Pn_DIR |= 1< Pn_PU &= ~(1< break; case 5: //弱准双向(标准51模式),开漏输出,带上拉 PORT_CFG |= (bP0_OC << Port); Pn_DIR &= ~(1< Pn_PU |= 1< break; case 6: //准双向(标准51模式),开漏输出,带上拉,当转变输出由低到高时,仅驱动2个时钟的高电平 PORT_CFG |= (bP0_OC << Port); Pn_DIR |= 1< Pn_PU |= 1< break; default: break; } if(Port == 0){ P0_DIR = Pn_DIR; P0_PU = Pn_PU; } if(Port == 1){ P1_DIR = Pn_DIR; P1_PU = Pn_PU; } if(Port == 2){ P2_DIR = Pn_DIR; P2_PU = Pn_PU; } if(Port == 3){ P3_DIR = Pn_DIR; P3_PU = Pn_PU; } return SUCCESS; } main( ) { UINT8 i; // CfgFsys( ); //CH559时钟选择配置 mDelaymS(5); //等待外部晶振稳定 // CH559UART0Alter(); FLAG = 0; //标志位清空 mInitSTDIO( ); //串口0初始化函数 ES = 1; //开启UART0中断 EA = 1; //总中断开启 CH559GPIOModeSelt(3,2,3); INT1 = 1; while(1) { if(FLAG == 1) { SBUF = DAT; FLAG = 0; } } } |
|
相关推荐
2个回答
|
|
代码中配置引脚输入输出模式的函数在配置推挽输出的时候,配置P3_DIR的时候多了‘~’符号,导致引脚模式配置错误,把这个‘~’去掉就好了。
|
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
342 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
2803 浏览 2 评论
2300 浏览 1 评论
使用ch569例程中的CH372Device程序,修改电脑端程序的读写端口时卡住了是什么原因?
344浏览 2评论
求助,CH368L的被动接口有没有详细的读写时序以及操作流程说明
741浏览 2评论
849浏览 2评论
916浏览 2评论
541浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-28 23:11 , Processed in 0.994325 second(s), Total 79, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号