完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
问题如题。在STM32CubeMX中创建了一个工程,选设了GPIO——开发板上的3个LED分别连接在PC7、PB7、PB14上因此选设这3个口,并分别命名为LED1,LED2,LED3;在Cube中时钟的设置只有HSI RC的显示为正常色,LSE、HSE都显示为灰色的不可选状态,因此选择前者。一切设置好生成工程后在IAR下编译下载都正常,但LED没有闪烁,程序运行后好像时钟不计数一样——永远在初始态,因为采用的是HSI RC内部振荡器,无法用示波器查看,请问是什么原因?在while(1)中: HAL_GPIO_WritePin(GPIOC,LED1_Pin,GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOB,LED2_Pin,GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOB,LED3_Pin,GPIO_PIN_SET); HAL_Delay(5000); HAL_GPIO_WritePin(GPIOC,LED1_Pin,GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB,LED2_Pin,GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB,LED3_Pin,GPIO_PIN_RESET); HAL_Delay(5000); 结果是LED 亮以后永远不灭了——没有闪烁! 先谢谢了 |
|
相关推荐
11个回答
|
|
我要看时钟初始化代码,看跟我碰到的问题是不是一样的
|
|
|
|
//System Clock Configuration void SystemClock_Config(void){ RCC_OscInitTypeDef RCC_OscInitStruct; RCC_ClkInitTypeDef RCC_ClkInitStruct; RCC_PeriphCLKInitTypeDef PeriphClkInit; //Configure the main internal regulator output voltage if (HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1) != HAL_OK){ _Error_Handler(__FILE__, __LINE__); } //Initializes the CPU, AHB and APB busses clocks RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.HSICalibrationValue = 16; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){ _Error_Handler(__FILE__, __LINE__); } //Initializes the CPU, AHB and APB busses clocks RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV2; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK){ _Error_Handler(__FILE__, __LINE__); } PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_LPUART1|RCC_PERIPHCLK_I2C1|RCC_PERIPHCLK_ADC; PeriphClkInit.Lpuart1ClockSelection = RCC_LPUART1CLKSOURCE_SYSCLK; PeriphClkInit.I2c1ClockSelection = RCC_I2C1CLKSOURCE_PCLK1; PeriphClkInit.AdcClockSelection = RCC_ADCCLKSOURCE_SYSCLK; if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK){ _Error_Handler(__FILE__, __LINE__); } //Configure the Systick interrupt time HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000); //Configure the Systick HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK); //SysTick_IRQn interrupt configuration HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); } 以上是初始化的代码,谢谢 实际上我开了2路ADC、2路PWM、1路Time、额外的PD7~PD3 GPIO OUT,以及1个PE2的GPIO IN。 |
|
|
|
HELLOKITTYNEW 发表于 2018-12-18 14:40 你这个直接用的HSI,没有使用PLL,跟咱的情况不一样哈。试着DEBUG一下,看看能不能找到问题 |
|
|
|
没有问题,可以加上PLL,反正都是Cube自动生成的。完后拷贝上来给你,谢谢 |
|
|
|
void SystemClock_Config(void){ RCC_OscInitTypeDef RCC_OscInitStruct; RCC_ClkInitTypeDef RCC_ClkInitStruct; RCC_PeriphCLKInitTypeDef PeriphClkInit; //Configure the main internal regulator output voltage if (HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1) != HAL_OK){ _Error_Handler(__FILE__, __LINE__); } //Initializes the CPU, AHB and APB busses clocks RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.HSICalibrationValue = 16; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; RCC_OscInitStruct.PLL.PLLN = 8; RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2; RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){ _Error_Handler(__FILE__, __LINE__); } //Initializes the CPU, AHB and APB busses clocks RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV2; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK){ _Error_Handler(__FILE__, __LINE__); } PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_LPUART1|RCC_PERIPHCLK_I2C1|RCC_PERIPHCLK_ADC; PeriphClkInit.Lpuart1ClockSelection = RCC_LPUART1CLKSOURCE_PCLK1; PeriphClkInit.I2c1ClockSelection = RCC_I2C1CLKSOURCE_PCLK1; PeriphClkInit.AdcClockSelection = RCC_ADCCLKSOURCE_PLLSAI1; PeriphClkInit.PLLSAI1.PLLSAI1Source = RCC_PLLSOURCE_HSI; PeriphClkInit.PLLSAI1.PLLSAI1M = 2; PeriphClkInit.PLLSAI1.PLLSAI1N = 32; PeriphClkInit.PLLSAI1.PLLSAI1P = RCC_PLLP_DIV2; PeriphClkInit.PLLSAI1.PLLSAI1Q = RCC_PLLQ_DIV2; PeriphClkInit.PLLSAI1.PLLSAI1R = RCC_PLLR_DIV4; PeriphClkInit.PLLSAI1.PLLSAI1ClockOut = RCC_PLLSAI1_ADC1CLK; if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK){ _Error_Handler(__FILE__, __LINE__); } //Configure the Systick interrupt time HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000); //Configure the Systick HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK); //SysTick_IRQn interrupt configuration HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); } |
|
|
|
标题不合格,请尽快修改标题
|
|
|
|
开GPIO的时钟了吗?
|
|
|
|
在CUBE中设置了GPIO和时钟树直接可以看到打开了 GPIO时钟。为了简化问题,已用ARMmbed工程绕开后续问题,谢谢。 |
|
|
|
不是 楼主开RCC的外部时钟了吗? 要选择HSE 那一栏的最后一个 晶振 才算打开
还有生成的代码是没有 √ RESET and RUN 这一项的 你得复位一下 代码才开始跑 |
|
|
|
查一下代码中是否有 __HAL_RCC_GPIOD_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); 这样的打开时钟的语句,这是打开GPIO时钟的函数 也不排除Cube生产的代码有Bug导致运行不正常的问题,我就曾发现过几个,还有就是看看《勘误表》是不是有什麽特别的说明 |
|
|
|
谢谢 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
STM32进行DMA数据转运,为什么只有A组最后一位数据被转运到B组去?
1148 浏览 2 评论
1497 浏览 3 评论
1129 浏览 0 评论
嵌入式开发 Win11安装ST-Link 提示 设备描述符请求失败 怎么处理?
1266 浏览 0 评论
1553 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-16 09:37 , Processed in 0.798859 second(s), Total 93, Slave 77 queries .
Powered by 电子发烧友网
© 2015 www.ws-dc.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191