完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本人新手,板子是f0discovery,带芯片F051,目前挑战闪烁灯,但是不知道何故,灯一直亮,完全不闪,源程序如下:
#include "STM32f0xx.h" #include "stm32f0xx_rcc.h" #include "stm32f0xx_flash.h" #include "stm32f0xx_cec.h" #include "stm32f0xx_gpio.h" #include void RCC_Config(void) { RCC_DeInit(); RCC_HSICmd(ENABLE); while (RCC_GetFlagStatus(RCC_FLAG_HSIRDY) != SET) /* check out, if HSI ready */ { } FLASH_PrefetchBufferCmd(ENABLE); /* Enable Flash */ FLASH_SetLatency(FLASH_Latency_1); /* Flash wait two State */ RCC_HCLKConfig(RCC_SYSCLK_Div1); RCC_PCLKConfig(RCC_HCLK_Div2); RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_16); /* PLLCLK = HSI/2 * 16 = 64 MHz */ RCC_PLLCmd(ENABLE); while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) != SET) /* check out, if PLL ready */ { } RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /* SYSCLK = PLLCLK = 64 MHz -> APB1 = 32 MHz, APB2 = 64 MHz */ while (RCC_GetSYSCLKSource() != 0x08) /* check out, if SYSCLK uses PLLCLK */ { } RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE); } void GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitS; GPIO_InitS.GPIO_Pin = GPIO_Pin_9; GPIO_InitS.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitS.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitS.GPIO_OType = GPIO_OType_PP; GPIO_Init(GPIOC,&GPIO_InitS); } int main(void) { int i = 0; while(1) { RCC_Config(); GPIO_Config(); while (1) { GPIO_SetBits(GPIOC, GPIO_Pin_9); GPIO_ResetBits(GPIOC, GPIO_Pin_9); } } } 开头我以为频率太快可能不行,所以把开关灯的setbits和resetbits加上循环,变成: for(i=1;i<30;i++) {GPIO_SetBits(GPIOC, GPIO_Pin_9);} for(i=1;i<30;i++) {GPIO_ResetBits(GPIOC, GPIO_Pin_9);} 让其有延时,灯还是不闪,各位知道是什么原因吗?谢谢 |
|
相关推荐
25个回答
|
|
延时再长点...
|
|
|
|
你看一下板载有没有晶振,051最大倍频只有48MH
|
|
|
|
SET和RESET和SET之间加延时。太快你根本看不到变化。
|
|
|
|
实际上就是频率太快
|
|
|
|
才加到30應該不夠,建議用timer試試看
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
已经加到30000了还是不行啊,话说如果是频率太高的问题的话,为什么会是一直亮灯,而不是一直不亮呢?谢谢 |
|
|
|
|
|
|
|
|
|
|
|
硬件有一个晶振位置 ,和仿真器上的晶振应该是一样的,上面写的是8M
|
|
|
|
用这个里面的,在他们上面改出错率低些
|
|
|
|
用仿真器单步走,这个就要看你先执行的操作会导致什么结果了。
|
|
|
|
|
|
|
|
STM32F0DISCOVERY板上是没有带外接晶振的,你如果采用外部晶振,会卡死在起振查询的地方
|
|
|
|
本帖最后由 profile5 于 2016-8-26 09:29 编辑 因为led灯亮起来,熄灭后会有 余辉, 数码管扫描就是这个原理。。。 个人觉得也可能是delay的问题。。。这儿30000真心不大,建议构造一个delay函数,里面使用双层嵌套循环来延时,记得打开后加延时,关闭后也加延时 |
|
|
|
超频了,改成使用hsi
|
|
|
|
while (1)
{ GPIO_SetBits(GPIOC, GPIO_Pin_9); GPIO_ResetBits(GPIOC, GPIO_Pin_9); } 这两条一开一关指令跑起来,1mS都不用,LED灯在狂:开关开关开关,电灯泡20MS闪的频率都看不到闪,这个怎么分的清LED在闪呢? 如果是开,停一下,再关,再停一下,再开,再停一下,是不是就很容易看清LED闪了。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2033 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1885 浏览 3 评论
4475 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2031 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2541 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-20 22:22 , Processed in 0.786108 second(s), Total 79, Slave 73 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号