无法切换GPIO端口引脚0,1,2,4。
端口0、1、3工作正常。
端口2-3是UART RX引脚,作为输入工作正常。
物理上,引脚是浮动的,没有连接到引脚0、1、2、4
零件标记为DA14681 01000 1649NCAB,这是QFN零件,因此所有端口都应可用。
我看到了测试功能的输出和物理探测的两个问题
1)当PIN状态为1时,主板上的输出仍为0.我在配置中错过了什么。正文末尾的代码。
2) 当代码运行以将其设置为激活状态时,为什么插脚2和4的插脚内部状态保持为0。
测试功能输出:
端口2引脚0状态= 1,MODE = 300,FUNC = 0
端口2引脚1状态=1,模式=300,函数=0
端口2引脚2状态= 0,MODE = 300,FUNC = 0
端口2引脚3状态=1,模式=0,函数=1
端口2引脚4状态= 0,MODE = 300,FUNC = 0
非活动:端口2引脚0状态=0,模式=300,函数=0
非活动:端口2引脚1状态=0,模式=300,函数=0
非活动:端口2引脚2状态=0,模式=300,函数=0
非活动:端口2针脚3状态=1,模式=0,功能=1
非活动:端口2引脚4状态=0,模式=300,函数=0
激活:端口2引脚0状态=1,模式=300,函数=0
主动:端口2引脚1状态= 1,mode = 300,func = 0
激活:端口2引脚2状态=0,模式=300,函数=0
活动:端口2引脚3状态= 1,mode = 0,Func = 1
活动:端口2引脚4状态= 0,MODE = 300,FUNC = 0
非活动:端口2引脚0状态=0,模式=300,函数=0
非活动:端口2引脚1状态=0,模式=300,函数=0
无效:端口2引脚2状态= 0,mode = 300,func = 0
非活动:端口2针脚3状态=1,模式=0,功能=1
非活动:端口2引脚4状态=0,模式=300,函数=0
静态孔隙试验(孔隙)
{
硬件gpio设置引脚功能(2,0,硬件gpio模式输出,硬件gpio功能gpio);
硬件gpio设置引脚功能(2,1,硬件gpio模式输出,硬件gpio功能gpio);
硬件gpio设置引脚功能(2,2,硬件gpio模式输出,硬件gpio功能gpio);
// hw_gpio_set_pin_function(2,3,hw_gpio_mode_output,hw_gpio_func_gpio);
硬件gpio设置引脚功能(2,4,硬件gpio模式输出,硬件gpio功能gpio);
printf(“HW_GPIO_模式_输出=%x,HW_GPIO_函数_GPIO=%x,HW_GPIO_模式_输入=%x\n\r”,
hw_gpio_mode_output,hw_gpio_func_gpio,hw_gpio_mode_input);
for(int i = 0; i <5; i ++)
{
hw_gpio_func func;
硬件GPIO模式;
bool status=hw_gpio_get_pin_status(2,i);
hw_gpio_get_pin_函数(2,i,&mode,&func);
printf(“端口2引脚%d状态=%d,mode =%x,func =%x \ n \ r”,i,状态,模式,func);
fflush(stdout);
}
硬件gpio设置不活动(2,0)//P2-0
hw_gpio_set_inactive(2,1);
硬件gpio设置不活动(2,2);
hw_gpio_set_inactive(2,4);
for(int i = 0; i <5; i ++)
{
hw_gpio_func func;
硬件GPIO模式;
bool status=hw_gpio_get_pin_status(2,i);
hw_gpio_get_pin_函数(2,i,&mode,&func);
printf(“无效:端口2引脚%d状态=%d,mode =%x,func =%x \ n \ r”,i,status,mode,func);
fflush(stdout);
}
硬件gpio设置激活(2,0)//P2-0
hw_gpio_set_active(2,1);
hw_gpio_set_active(2,2);
硬件gpio设置激活(2,4);
for(int i = 0; i <5; i ++)
{
hw_gpio_func func;
硬件GPIO模式;
bool status=hw_gpio_get_pin_status(2,i);
hw_gpio_get_pin_函数(2,i,&mode,&func);
printf(“活动:端口2引脚%d状态=%d,mode =%x,func =%x \ n \ r”,i,状态,模式,func);
fflush(stdout);
}
硬件gpio设置不活动(2,0)//P2-0
hw_gpio_set_inactive(2,1);
硬件gpio设置不活动(2,2);
hw_gpio_set_inactive(2,4);
for(int i = 0; i <5; i ++)
{
hw_gpio_func func;
硬件GPIO模式;
bool status=hw_gpio_get_pin_status(2,i);
hw_gpio_get_pin_函数(2,i,&mode,&func);
printf(“非活动:端口2插脚%d状态=%d,模式=%x,函数=%x\n\r”,i,状态,模式,函数);
fflush(stdout);
}
}
嗨,理查德:
- 您使用的是对话框开发套件,或您自己的原型。
- 是否可以使用对话框devkit和SDK的项目之一进行测试。yu可以将您的例程添加到项目并测试它。
谢谢,
tru对话框
我们正在使用专业开发板。
我使用了freertos_重定目标,得到了类似的结果。示波器显示这些引脚上没有过渡。
报告的状态为1,2,4留下0.即使设置为活跃。
同样的结果与两个Pro Dev板相同。
端口2引脚0状态=0,模式=300,函数=0
端口2引脚1状态=0,模式=300,函数=0
端口2引脚2状态= 0,MODE = 300,FUNC = 0
端口2引脚3状态=1,模式=0,函数=1
端口2引脚4状态= 0,MODE = 300,FUNC = 0
非活动:端口2引脚0状态=0,模式=300,函数=0
非活动:端口2引脚1状态=0,模式=300,函数=0
非活动:端口2引脚2状态=0,模式=300,函数=0
非活动:端口2针脚3状态=1,模式=0,功能=1
非活动:端口2引脚4状态=0,模式=300,函数=0
激活:端口2引脚0状态=1,模式=300,函数=0
激活:端口2引脚1状态=0,模式=300,函数=0
激活:端口2引脚2状态=0,模式=300,函数=0
活动:端口2引脚3状态= 1,mode = 0,Func = 1
活动:端口2引脚4状态= 0,MODE = 300,FUNC = 0
非活动:端口2引脚0状态=0,模式=300,函数=0
非活动:端口2引脚1状态=0,模式=300,函数=0
无效:端口2引脚2状态= 0,mode = 300,func = 0
非活动:端口2针脚3状态=1,模式=0,功能=1
非活动:端口2引脚4状态=0,模式=300,函数=0
嗨,理查德:
让我总结问题:“你无法切换p2_0,p2_1,p2_2,p2_4。”。这样对吗?
P2_0和P2_1用于XTAL32连接。如果您想将它们用作GPIO,则必须选择并使用内部RCX作为睡眠时钟的源。你做过这个吗?
P2_4用于SWCLK。您能否确认您没有使用JTAG?
P2_2还用于devkit上的USB。您能确认您没有调用USB相关软件吗?
回答上述问题将有助于确保测试条件正确。
谢谢,
tru对话框
是的,我们已经移除了水晶和
设置
#定义dg\U配置使用\U LP\U CLK LP\U CLK\U RCX
我们已经准备好了
#define dg_configuse_usb(0)
我们正在为SWCLK和P0-6留下P2_4,因为SWDIO,但感谢您指向OUT。
我现在可以使用usbpad_en来控制p2_2
空隙测试(空白)
{
注册表设置位(CRG\U PER、USBPAD\U注册表、USBPAD\U EN);//使用此命令,我可以将P2_2作为GPIO与下面的设置引脚功能结合使用。
硬件gpio设置引脚功能(2,0,硬件gpio模式输出,硬件gpio功能gpio);
硬件gpio设置引脚功能(2,1,硬件gpio模式输出,硬件gpio功能gpio);
硬件gpio设置引脚功能(2,2,硬件gpio模式输出,硬件gpio功能gpio);
// hw_gpio_set_pin_function(2,3,hw_gpio_mode_output,hw_gpio_func_gpio);// UART RX.
// hw_gpio_set_pin_function(2,4,hw_gpio_mode_input,hw_gpio_func_gpio);// SWDIO.
...
}
现在,当我设置或清除P2_2时,它的行为就像gpio引脚。
我仍然无法切换P2_0或P2_1,我正在查看是否有需要清除的模拟设置与GPIO FUNC和模式设置分开。
是否有一种“正确”的方法来调用USBPAD_EN,或者这是最好的方法,我认为这应该在periph_init中完成。
稍后,当我解出P2_0和P2_1时,我将对此进行测试。
解决了p2_0,1问题。
标记为2-0和2-1的主板引脚与子板物理断开。
如果我在子板上的水晶垫探测我得到了预期的行为。
最靠近Y2标记的焊盘为P2-0。
为了连接子板和主板之间的P2_0和P2_1,必须在子板上的R5和R6处放置两个0欧姆电阻器。
对于USB:
我还移除了J6的跳线。从一开始。
因此,我在这一点上唯一悬而未决的问题是,设置USBPAD_EN的正确方法是什么
嗨,理查德:
数据表中的表1(引脚说明)有以下注释:
注:在GPIO模式下使用此引脚必须设置USBPAD_REG[USBPAD_EN]。必须是仅用于V33电源。
此外,在第151页:
33.5特殊I/O注意事项
使用GPIOS有一定的考虑因素
解释如下:
•在GPIO模式下使用P1_1或P2_2,
必须设置usbpad_reg [usbpad_en]。然而,
此引脚上的允许级别为0 V和
V33轨上的电压。当选择1.8 V作为
引脚供电时,负载电流增加150A.
因为这些引脚没有背面驱动器保护。
此外,这些引脚不应该在睡眠中使用
模式,因为USBPAD_REG将通电
关闭(属于外围电源领域)。
您设置的方式usbpad_en应该没问题。你有疑虑吗?
我也在内部反复检查这一点。
谢谢,
tru对话框