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

如何使用STM32F0的晶振腿做GPIO口  

[复制链接]
damiaa 提问时间:2015-1-22 21:55 /
本帖最后由 damiaa 于 2015-2-13 15:30 编辑

如何使用STM32F0的晶振腿做GPIO口? 因为产品的IO太少,所以就使用内部晶体,然后用这两个腿做GPIO。
方法一:
1,使用STM32CUBE生成,选择晶体为内部晶体。外部旁路。
2,STM32CUBE里设置这两个IO为GPIO。
3,生成代码。
4,因为我用的STM32F030K6,所以是PF0,PF1这两个晶振腿做GPIO。
5,编译运行。

方法二:
1,使用时钟配置工具(ST提供的一个 EXECL表格)配置晶体为内部晶体。
编译工具和说明书:
stm32f0clockconfig.zip (494.36 KB, 下载次数: 369)
1 收藏 4 评论27 发布时间:2015-1-22 21:55

举报

27个回答
愚民点子 回答时间:2017-4-8 10:30:58
void LED8_Init(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);        //ÉèÖÃGPIO ʱÖÓ
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);        //ÉèÖÃGPIO ʱÖÓ
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOF, ENABLE);        //ÉèÖÃGPIO ʱÖÓ

        GPIO_InitStructure.GPIO_Pin =         GPIO_Pin_0 |GPIO_Pin_1 |GPIO_Pin_2 |GPIO_Pin_3
                                                                   |GPIO_Pin_4 |GPIO_Pin_5 |GPIO_Pin_6 |GPIO_Pin_7
                                                                   |GPIO_Pin_8 |GPIO_Pin_9 |GPIO_Pin_10 |GPIO_Pin_11
                                                                   |GPIO_Pin_12|GPIO_Pin_15;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_Init(GPIOA,  &GPIO_InitStructure);
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 |GPIO_Pin_1 |GPIO_Pin_3 |GPIO_Pin_4 |GPIO_Pin_5 |GPIO_Pin_6 |GPIO_Pin_7;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_Init(GPIOB,  &GPIO_InitStructure);
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 |GPIO_Pin_1;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_Init(GPIOF,  &GPIO_InitStructure);
       
//        GPIO_PinAFConfig(GPIOF,GPIO_PinSource0,GPIO_AF_1);
//        GPIO_PinAFConfig(GPIOF,GPIO_PinSource1,GPIO_AF_1);
}

/****************************************************
º¯Êý¹¦ÄÜ£ºLED¿ª
ÊäÈë²ÎÊý£ºÎÞ
Êä³ö²ÎÊý£ºÎÞ
±¸    ×¢£ºµ÷Óô˺¯ÊýÇ°£¬ÐèÒªÔÚLED.hÐ޸ĺ궨ÒåLEDÒý½Å
****************************************************/
void LED0_OFF(void)
{
        GPIO_ResetBits(GPIOA, GPIO_Pin_8);
}

void LED1_OFF(void)
{
        GPIO_ResetBits(GPIOA, GPIO_Pin_9);
}

void LED2_OFF(void)
{
        GPIO_ResetBits(GPIOA, GPIO_Pin_10);
}

void LED3_OFF(void)
{
        GPIO_ResetBits(GPIOA, GPIO_Pin_11);
}

void LED4_OFF(void)
{
        GPIO_ResetBits(GPIOA, GPIO_Pin_12);
}

void LED5_OFF(void)
{
        GPIO_ResetBits(GPIOA, GPIO_Pin_15);
}

void LED6_OFF(void)
{
        GPIO_ResetBits(GPIOB, GPIO_Pin_3);
}

void LED7_OFF(void)
{
        GPIO_ResetBits(GPIOB, GPIO_Pin_4);
}

void LED8_OFF(void)
{
        GPIO_ResetBits(GPIOB, GPIO_Pin_5);
}

void LED9_OFF(void)
{
        GPIO_ResetBits(GPIOB, GPIO_Pin_6);
}

void LED10_OFF(void)
{
        GPIO_ResetBits(GPIOB, GPIO_Pin_7);
}

void LED11_OFF(void)
{
        GPIO_ResetBits(GPIOF, GPIO_Pin_0);
}

void LED12_OFF(void)
{
        GPIO_ResetBits(GPIOF, GPIO_Pin_1);
}

void LED13_OFF(void)
{
        GPIO_ResetBits(GPIOA, GPIO_Pin_0);
}

void LED14_OFF(void)
{
        GPIO_ResetBits(GPIOA, GPIO_Pin_1);
}

void LED15_OFF(void)
{
        GPIO_ResetBits(GPIOA, GPIO_Pin_2);
}

void LED16_OFF(void)
{
        GPIO_ResetBits(GPIOA, GPIO_Pin_3);
}

void LED17_OFF(void)
{
        GPIO_ResetBits(GPIOA, GPIO_Pin_4);
}

void LED18_OFF(void)
{
        GPIO_ResetBits(GPIOA, GPIO_Pin_5);
}

void LED19_OFF(void)
{
        GPIO_ResetBits(GPIOA, GPIO_Pin_6);
}

void LED20_OFF(void)
{
        GPIO_ResetBits(GPIOA, GPIO_Pin_7);
}

void LED21_OFF(void)
{
        GPIO_ResetBits(GPIOB, GPIO_Pin_0);
}
/****************************************************
º¯Êý¹¦ÄÜ£ºLED¹Ø
ÊäÈë²ÎÊý£ºÎÞ
Êä³ö²ÎÊý£ºÎÞ
±¸    ×¢£ºµ÷Óô˺¯ÊýÇ°£¬ÐèÒªÔÚLED.hÐ޸ĺ궨ÒåLEDÒý½Å
****************************************************/
void LED0_ON(void)
{
        GPIO_SetBits(GPIOA, GPIO_Pin_8);
}

void LED1_ON(void)
{
        GPIO_SetBits(GPIOA, GPIO_Pin_9);
}

void LED2_ON(void)
{
        GPIO_SetBits(GPIOA, GPIO_Pin_10);
}

void LED3_ON(void)
{
        GPIO_SetBits(GPIOA, GPIO_Pin_11);
}

void LED4_ON(void)
{
        GPIO_SetBits(GPIOA, GPIO_Pin_12);
}

void LED5_ON(void)
{
        GPIO_SetBits(GPIOA, GPIO_Pin_15);
}

void LED6_ON(void)
{
        GPIO_SetBits(GPIOB, GPIO_Pin_3);
}

void LED7_ON(void)
{
        GPIO_SetBits(GPIOB, GPIO_Pin_4);
}

void LED8_ON(void)
{
        GPIO_SetBits(GPIOB, GPIO_Pin_5);
}

void LED9_ON(void)
{
        GPIO_SetBits(GPIOB, GPIO_Pin_6);
}

void LED10_ON(void)
{
        GPIO_SetBits(GPIOB, GPIO_Pin_7);
}

void LED11_ON(void)
{
        GPIO_SetBits(GPIOF, GPIO_Pin_0);
}

void LED12_ON(void)
{
        GPIO_SetBits(GPIOF, GPIO_Pin_1);
}

void LED13_ON(void)
{
        GPIO_SetBits(GPIOA, GPIO_Pin_0);
}

void LED14_ON(void)
{
        GPIO_SetBits(GPIOA, GPIO_Pin_1);
}

void LED15_ON(void)
{
        GPIO_SetBits(GPIOA, GPIO_Pin_2);
}

void LED16_ON(void)
{
        GPIO_SetBits(GPIOA, GPIO_Pin_3);
}

void LED17_ON(void)
{
        GPIO_SetBits(GPIOA, GPIO_Pin_4);
}

void LED18_ON(void)
{
        GPIO_SetBits(GPIOA, GPIO_Pin_5);
}

void LED19_ON(void)
{
        GPIO_SetBits(GPIOA, GPIO_Pin_6);
}

void LED20_ON(void)
{
        GPIO_SetBits(GPIOA, GPIO_Pin_7);
}

void LED21_ON(void)
{
        GPIO_SetBits(GPIOB, GPIO_Pin_0);
}

打开STM32F0xx_Clock_Configuration_V1.0.1,点击RUN

打开STM32F0xx_Clock_Configuration_V1.0.1,点击RUN

点击PLL(HSI)...

点击PLL(HSI)...

点击KO

点击KO

复制system_stm32f0xx.c

复制system_stm32f0xx.c

到项目替换system_stm32f0xx.c

到项目替换system_stm32f0xx.c
a随遇而安a 回答时间:2018-6-1 14:51:42
用这些的好处是省事,坏处但是不清楚原理。手册有详细描述的,把RCC_CR寄存器HSEON关了就可以。
sing the HSE or LSE oscillator pins as GPIOs
When the HSE or LSE oscillator is switched OFF (default state after reset), the related
oscillator pins can be used as normal GPIOs.
When the HSE or LSE oscillator is switched ON (by setting the HSEON or LSEON bit in the
RCC_CSR register) the oscillator takes control of its associated pins and the GPIO
configuration of these pins has no effect.
When the oscillator is configured in a user external clock mode, only the pin is reserved for
clock input and the OSC_OUT or OSC32_OUT pin can still be used as normal GPIO.
zministaryfw 回答时间:2015-2-13 14:59:55
根据文档里面的寄存器配置,可以把晶振引脚映射到其它的IO上面去,这样晶振引脚就可以用作IO口了
wu1169668869 回答时间:2015-1-23 09:07:17
这些工具都好方便
党国特派员 回答时间:2015-1-23 09:26:45
1.png
stary666 回答时间:2015-1-23 09:27:06
:):)
feel-376797 回答时间:2015-1-23 09:30:18
谢谢楼主分享!
holts1 回答时间:2015-1-23 09:50:14
直接GPIO_INIT为输出就可以使用了
埃斯提爱慕 回答时间:2015-1-23 10:56:52
提示: 作者被禁止或删除 内容自动屏蔽
子曰小玖 回答时间:2015-1-23 11:12:48
谢谢分享
wyxy163@126.com 回答时间:2015-1-23 17:54:32
提示: 作者被禁止或删除 内容自动屏蔽
stary666 回答时间:2015-1-28 13:32:53
damiaa 回答时间:2015-2-13 13:49:11
本贴拿8金币回帖奖励。前8位每人1枚。
wamcncn 回答时间:2015-2-13 14:54:21
exel电脑的老了,识别不能配置
zministaryfw 回答时间:2015-2-13 15:00:32
你可以试试,利用寄存器更改映射
dear祝子 回答时间:2015-2-13 15:51:14
谢谢楼主分享
12下一页
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版