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

TM4C123GH6PM的PF0引脚不能用的问题

[复制链接]
3950|23
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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
理由:感谢大神不厌其烦的教诲

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

NMI是什么功能,看了资料没理解。。。要用什么函数来解锁呢

使用特权

评论回复
6
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

7
10299823| | 2016-5-6 23:04 | 只看该作者
特殊引脚呢

使用特权

评论回复
8
10299823| | 2016-5-6 23:08 | 只看该作者
跟stm32上的一样

使用特权

评论回复
9
djz1992|  楼主 | 2016-5-9 08:44 | 只看该作者

谢谢,学习了

使用特权

评论回复
10
djz1992|  楼主 | 2016-5-9 08:46 | 只看该作者
xyz549040622 发表于 2016-5-6 19:35
NMI是不可屏蔽中断。
TM4C123x的PF0和PD7脚有锁,在解锁后方可以指定管脚功能。详细信息请参考GPIO部分的 ...

学习了!!!!!谢谢!!!

使用特权

评论回复
11
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);

使用特权

评论回复
12
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);
改了顺序,把重新锁定屏蔽了也没用

使用特权

评论回复
13
vibra2016| | 2016-5-9 20:14 | 只看该作者
这个学习的了,很不错的讨论的,我还没用过的。

使用特权

评论回复
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) |=  ...

寄存器跟踪看了没,修改过来了么?

使用特权

评论回复
15
djz1992|  楼主 | 2016-5-10 10:57 | 只看该作者
xyz549040622 发表于 2016-5-9 21:14
寄存器跟踪看了没,修改过来了么?

可以了,才发现是我初始化函数被注掉了。。启用后就好了

使用特权

评论回复
16
djz1992|  楼主 | 2016-5-10 14:52 | 只看该作者
xyz549040622 发表于 2016-5-6 15:27
PF0是NMI引脚,这是个特殊的引脚,默认是锁住的,你需要把他给解锁。

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

使用特权

评论回复
17
xyz549040622| | 2016-5-10 15:04 | 只看该作者
djz1992 发表于 2016-5-10 14:52
为什么调试的时候老是会出现这个错误,以前都没有的?

不知道你怎么引入的了,重新导入工程,把函数复制进去就好了。

使用特权

评论回复
18
djz1992|  楼主 | 2016-5-10 15:26 | 只看该作者
xyz549040622 发表于 2016-5-10 15:04
不知道你怎么引入的了,重新导入工程,把函数复制进去就好了。

好吧我试试
另外有几个问题
1.我看到自带有Crc16的函数,不知道需要添加什么头文件才能使用?
2.为什么我的485输出AB间的电压差才正负0.5V,我的串口输出到485芯片上我看是对的,这个跟软件有关系吗?

使用特权

评论回复
19
Snow7| | 2016-5-10 21:07 | 只看该作者
PD7和PF0是和NMI中断复用的,NMI中断优先级很高

使用特权

评论回复
20
android2| | 2016-5-10 21:28 | 只看该作者
PF0脚有锁,在解锁后方可以指定管脚功能

使用特权

评论回复
发新帖 本帖赏金 13.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

115

主题

620

帖子

5

粉丝