12下一页
返回列表 发新帖我要提问本帖赏金: 13.00元(功能说明)

TM4C123GH6PM的PF0引脚不能用的问题

[复制链接]
4460|23
 楼主| djz1992 发表于 2016-5-6 15:12 | 显示全部楼层 |阅读模式
TM4C123GH6PM的PF0使能后无论怎么write,都吾非改变它的状态,不会高低变化。同样的PF1和PF4都可以高低变化,而且我用read读取引脚的状态,在调试运行里看K的值,是可以0和1变化的,但是示波器去测引脚,就没有任何反应。
这是我在使用PF0,作为RS485的控制脚的时候发现的问题。到底是PF0比较特殊,还是芯片的问题?
注:1.芯片引脚与后续电路已经断开,无其他电路影响。
2.另一块板子的这个芯片这个PF0一样的现象。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| djz1992 发表于 2016-5-6 15:13 | 显示全部楼层
@dirtwillfly @xyz549040622 两位大神,帮忙看看呢
xyz549040622 发表于 2016-5-6 15:27 | 显示全部楼层
PF0是NMI引脚,这是个特殊的引脚,默认是锁住的,你需要把他给解锁。
dirtwillfly 发表于 2016-5-6 15:45 | 显示全部楼层
xyz549040622 发表于 2016-5-6 15:27
PF0是NMI引脚,这是个特殊的引脚,默认是锁住的,你需要把他给解锁。

打赏榜单

djz1992 打赏了 5.00 元 2016-05-11
理由:感谢大神不厌其烦的教诲

 楼主| djz1992 发表于 2016-5-6 16:55 | 显示全部楼层
xyz549040622 发表于 2016-5-6 15:27
PF0是NMI引脚,这是个特殊的引脚,默认是锁住的,你需要把他给解锁。

NMI是什么功能,看了资料没理解。。。要用什么函数来解锁呢
xyz549040622 发表于 2016-5-6 19:35 | 显示全部楼层
djz1992 发表于 2016-5-6 16:55
NMI是什么功能,看了资料没理解。。。要用什么函数来解锁呢

NMI是不可屏蔽中断。
TM4C123x的PF0和PD7脚有锁,在解锁后方可以指定管脚功能。详细信息请参考GPIO部分的GPIOLOCK和GPIOCR寄存器及相关描述。
如果需要调整PF0的功能,需要在使能PF脚后执行如下操作:

HWREG(BUTTONS_GPIO_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY;//解锁

HWREG(BUTTONS_GPIO_BASE + GPIO_O_CR) |= 0x01;// (GPIOCR 寄存器的内容只有在 GPIOLOCK 寄存器解锁时才能被修改)确认相应的位如果是PD7解锁应该写入0x80

HWREG(BUTTONS_GPIO_BASE + GPIO_O_LOCK) = 0;//重新锁定

要包含的头文件

#include "inc/hw_types.h"

#include "inc/hw_gpio.h"



实际上不只是PD7和PF0,PC[3:0]也是有锁的。因为PD7和PF0是和NMI中断复用的,NMI中断优先级很高(仅次于复位中断),为了防止程序误动作,加锁可以起到保护作用。PC[3:0]是Jtag。也是一种保护。

可参考例程

C:\ti\TivaWare_C_Series-1.0\examples\boards\ek-tm4c123gxl\drivers\buttons.c

//PF0解锁

        HWREG(GPIO_PORTF_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY;//解锁

        HWREG(GPIO_PORTF_BASE + GPIO_O_CR) |= 0x01;//确认

        HWREG(GPIO_PORTF_BASE + GPIO_O_LOCK) = 0;//重新锁定

        GPIOPinTypeGPIOInput(GPIO_PORTC_BASE,GPIO_PIN_4|GPIO_PIN_5 |GPIO_PIN_6);

        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);//使能GPIOF



//PD7解锁

        HWREG(GPIO_PORTD_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY;//解锁

        HWREG(GPIO_PORTD_BASE + GPIO_O_CR) |= 0x80;//确认

        HWREG(GPIO_PORTD_BASE + GPIO_O_LOCK) = 0;//重新锁定

打赏榜单

djz1992 打赏了 5.00 元 2016-05-11
理由:感谢大神耐心教诲

dirtwillfly 打赏了 3.00 元 2016-05-09

10299823 发表于 2016-5-6 23:04 | 显示全部楼层
特殊引脚呢
10299823 发表于 2016-5-6 23:08 | 显示全部楼层
跟stm32上的一样
 楼主| djz1992 发表于 2016-5-9 08:44 | 显示全部楼层

谢谢,学习了
 楼主| djz1992 发表于 2016-5-9 08:46 | 显示全部楼层
xyz549040622 发表于 2016-5-6 19:35
NMI是不可屏蔽中断。
TM4C123x的PF0和PD7脚有锁,在解锁后方可以指定管脚功能。详细信息请参考GPIO部分的 ...

学习了!!!!!谢谢!!!
 楼主| djz1992 发表于 2016-5-9 09:59 | 显示全部楼层
xyz549040622 发表于 2016-5-6 19:35
NMI是不可屏蔽中断。
TM4C123x的PF0和PD7脚有锁,在解锁后方可以指定管脚功能。详细信息请参考GPIO部分的 ...

ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
HWREG(GPIO_PORTF_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY;//解锁
HWREG(GPIO_PORTF_BASE + GPIO_O_CR) |= 0x01;//确认
HWREG(GPIO_PORTF_BASE + GPIO_O_LOCK) = 0;//重新锁定
//GPIOPinTypeGPIOInput(GPIO_PORTC_BASE,GPIO_PIN_4|GPIO_PIN_5 |GPIO_PIN_6);
ROM_GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE,GPIO_PIN_0);//使能PF0为输出、RS485_CTRL
ROM_GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_0,GPIO_PIN_0);

为什么这么写输出的还是低电平。。还是不能置高
另外这一句应该注掉的吧?//GPIOPinTypeGPIOInput(GPIO_PORTC_BASE,GPIO_PIN_4|GPIO_PIN_5 |GPIO_PIN_6);

 楼主| djz1992 发表于 2016-5-9 11:25 | 显示全部楼层
xyz549040622 发表于 2016-5-6 19:35
NMI是不可屏蔽中断。
TM4C123x的PF0和PD7脚有锁,在解锁后方可以指定管脚功能。详细信息请参考GPIO部分的 ...

HWREG(GPIO_PORTF_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY;//解锁
HWREG(GPIO_PORTF_BASE + GPIO_O_CR) |= 0x01;//确认PF0
GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE,GPIO_PIN_0);//使能PF0为输出、RS485_CTRL
    //HWREG(GPIO_PORTF_BASE + GPIO_O_LOCK) = 0;//重新锁定
    //GPIOPinTypeGPIOInput(GPIO_PORTC_BASE,GPIO_PIN_4|GPIO_PIN_5 |GPIO_PIN_6);
ROM_GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_0,GPIO_PIN_0);
改了顺序,把重新锁定屏蔽了也没用
vibra2016 发表于 2016-5-9 20:14 | 显示全部楼层
这个学习的了,很不错的讨论的,我还没用过的。
xyz549040622 发表于 2016-5-9 21:14 | 显示全部楼层
djz1992 发表于 2016-5-9 11:25
HWREG(GPIO_PORTF_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY;//解锁
HWREG(GPIO_PORTF_BASE + GPIO_O_CR) |=  ...

寄存器跟踪看了没,修改过来了么?
 楼主| djz1992 发表于 2016-5-10 10:57 | 显示全部楼层
xyz549040622 发表于 2016-5-9 21:14
寄存器跟踪看了没,修改过来了么?

可以了,才发现是我初始化函数被注掉了。。启用后就好了
 楼主| djz1992 发表于 2016-5-10 14:52 | 显示全部楼层
xyz549040622 发表于 2016-5-6 15:27
PF0是NMI引脚,这是个特殊的引脚,默认是锁住的,你需要把他给解锁。

为什么调试的时候老是会出现这个错误,以前都没有的?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
xyz549040622 发表于 2016-5-10 15:04 | 显示全部楼层
djz1992 发表于 2016-5-10 14:52
为什么调试的时候老是会出现这个错误,以前都没有的?

不知道你怎么引入的了,重新导入工程,把函数复制进去就好了。
 楼主| djz1992 发表于 2016-5-10 15:26 | 显示全部楼层
xyz549040622 发表于 2016-5-10 15:04
不知道你怎么引入的了,重新导入工程,把函数复制进去就好了。

好吧我试试
另外有几个问题
1.我看到自带有Crc16的函数,不知道需要添加什么头文件才能使用?
2.为什么我的485输出AB间的电压差才正负0.5V,我的串口输出到485芯片上我看是对的,这个跟软件有关系吗?
Snow7 发表于 2016-5-10 21:07 | 显示全部楼层
PD7和PF0是和NMI中断复用的,NMI中断优先级很高
android2 发表于 2016-5-10 21:28 | 显示全部楼层
PF0脚有锁,在解锁后方可以指定管脚功能
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:人生苦短,冬日苦长,正是青葱,却无骄阳

115

主题

620

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部