你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

HSE 引脚用作GPIO碰到问题

[复制链接]
huangjiayin 提问时间:2014-12-17 10:05 /
我使用的是STM32F030,采用内部时钟(HSI),现想把PF0(OSC-IN)和PF1(OSC-OUT)作为普通IO,把这2个脚设为推挽方式后,没反应
            RCC->AHBENR|=1<<22;                //使能PortF时钟
           GPIOF->MODER   = 0X55555555 ;  //所有的IO设为推挽方式
           GPIOF->OTYPER  = 0X00000000;  
           GPIOF->OSPEEDR = 0X00000000;  
           GPIOF->PUPDR   = 0X00000000;
我看到参考手册如下内容:
"HSE 或LSE 引脚用作GPIO,当HSE或LSE振荡器关断时 ( 复位后的缺省状态) ,相关振荡器引脚可以用做普通的GPIO口。当HSE 或LSE 振荡器开启 ( 在RCC_CSR 寄存器设置HSEON 或LSEON 位来开启) 振荡器控制其相关引脚且相关引脚的GPIO 配置无效。......."
RCC_CSR 寄存器没有HSEON /LSEON 位,不知ST公司是怎么得来的?
收藏 1 评论19 发布时间:2014-12-17 10:05

举报

19个回答
huangjiayin 回答时间:2014-12-17 14:14:35
多谢2位的回复,巅峰残狼---我试过你的方法,还是不行.
安----应该是ST写错了,应该是RCC_CR,不是RCC_CSR.现我的程序是采用内部晶振HSI,已关闭了外不晶振HSE,那么OSC-IN(PF0)和OSC-OUT(PF1)这2个脚应该可以做为普通IO,但实际上还是不行啊.下面贴出时钟初始化部分:
void Stm32_Clock_Init(void)
{   
           //--------以下是内部HSI---------------
           uint8_t temp=0;
           RCC->AHBENR|=1<<22;                //使能PortF时钟
           RCC->APB1RSTR = 0x00000000;        //复位结束
           RCC->APB2RSTR = 0x00000000;
           RCC->APB2ENR = 0x00000000;         //外设时钟关闭.                  
           RCC->APB1ENR = 0x00000000;
        
           RCC->CR |= 1<<18;                  //禁用外部HSE
           RCC->CR |= 0x00000001;             //使能内部高速时钟HSION         
           while((RCC->CR&(1<<1))!=(1<<1));   //等待HSIRDY位变为1
           RCC->CFGR|=1<<16;                       //PLLSRC ON (此位一定要在关闭PLL后才能设置)
           RCC->CFGR=0X00000000;              //APB1=DIV1;APB2=DIV1;AHB=DIV1
           RCC->CFGR|=1<<21;                  //12倍频
           RCC->CFGR|=1<<19;         
           RCC->CR|=1<<24;                    //PLLON
           while((RCC->CR&(1<<25))!=(1<<25)); //等待PLL锁定
           RCC->CFGR|=0x00000002;             //PLL作为系统时钟         
           while(temp!=0x02)                  //等待PLL作为系统时钟设置成功
           {   
                      temp=RCC->CFGR>>2;
                      temp&=0x03;
           }
}
xueshawu 回答时间:2017-3-5 13:07:32
Mrbls 发表于 2015-6-14 16:34
请问楼主问题是怎么解决的?我现在也遇到了差不多的问题,在SetSysClock()中关闭了HSE,但系统其它问题就总 ...

我现在也是这个需求,HSE 已经关闭 RCC->CR = 0x03005A83
但是只有PF1能正常控制输出,PF0一直初一低电平状态;而且我用你上面的代码测试也一样;时间久远,不知道楼主能否帮忙解惑
于心▶J 回答时间:2018-1-12 15:54:13
xueshawu1 发表于 2017-3-5 13:07
我现在也是这个需求,HSE 已经关闭 RCC->CR = 0x03005A83
但是只有PF1能正常控制输出,PF0一直初一低电 ...

你好,虽然时间比较久,但是 我也遇到了同样的问题。PF0无法控制、PF1可控制,不知道你后来解决了没
废鱼 回答时间:2014-12-17 11:27:28
RCC_CR,使这个寄存器。
巅峰残狼 回答时间:2014-12-17 12:16:18
先不使能时钟功能再进行配置。。。。
wamcncn 回答时间:2014-12-18 14:38:56
查看了下资料,  通过时钟控制寄存器RCC_CR 的HISON 位打开或者禁用。
奔跑小蜗牛 回答时间:2014-12-18 14:44:35
不加晶振上电默认就是用的HSI,去掉晶振电路,你先不加时钟初始化程序,直接配置引脚,看下效果
huangjiayin 回答时间:2014-12-18 16:14:18
多谢各位热心的回复,已解决了,原因是----RCC->CR同时出现了HSEON和HSION位等于1.我从来没给HSEON置1,它是怎么变为1的?参靠手册说复位后变为0,但实际上...
huangjiayin 回答时间:2014-12-18 16:15:50
多谢各位热心的回复,已解决了,原因是----RCC->CR同时出现了HSEON和HSION位等于1.我从来没给HSEON置1,它是怎么变为1的?参靠手册说复位后变为0,但实际上...
万里-363223 回答时间:2014-12-19 08:39:49
感觉怪怪的
Mrbls 回答时间:2015-6-14 16:34:06
请问楼主问题是怎么解决的?我现在也遇到了差不多的问题,在SetSysClock()中关闭了HSE,但系统其它问题就总是出现问题,望指点,万分感谢。
zhao.zhao 回答时间:2017-3-9 22:03:59
直接用HSI,外接晶振不要用。库函数实现的话需要改SystemInit()内的寄存器,按手册改;
怕麻烦的话用STM32cubeMX, 勾选时钟为HSI,再选一下PLL,直接生成代码,很方便的。
对应晶振的引脚就可以按常规的IO设置了。
zbber 回答时间:2017-3-10 11:54:04
查看了下资料,  通过时钟控制寄存器RCC_CR 的HISON 位打开或者禁用
xueshawu 回答时间:2018-1-12 16:43:19
于心▶J 发表于 2018-1-12 15:54
你好,虽然时间比较久,但是 我也遇到了同样的问题。PF0无法控制、PF1可控制,不知道你后来解决了没 ...

哦哦,请参考我的帖子
http://www.openedv.com/forum.php ... id=95688&extra=
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版