完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我想在不同频率下设置不同的外设。 但使用 SDL 7.9.0 我只能设置一个频率。 外设设置分频器和使能分频器,而分配分频器可以控制各自的时钟频率,但我无法做到这一点
分享相同的示例代码 外设源配置为 80Mhz,我将分频器设置为 0,基本上是除以 1,因此外设源为 80Mhz,而通过分配各 IP 块的分频器,分频器为 4,我希望分频器为 5,因此 80/5 = 16Mhz,但没有达到我的预期。 请告诉我,我的理解是否正确? 或建议我一种配置每个外设的方法,如 SPI 为 4Mhz,定时器为 16Mhz,I2C 为 2Mhz 另外,当我这样做时,工作正常,但用这种方法,我无法为不同的外设设置不同的工作频率。 为什么分配分频器中的非零分频器不能正常工作? |
|
相关推荐
1个回答
|
|
1. 首先,您需要确定系统时钟源和可用的时钟频率。通常,这些信息可以在微控制器的数据手册中找到。 2. 接下来,您需要配置时钟树,以便为不同的外设提供所需的时钟频率。这通常涉及设置分频器、PLL(相位锁定环)和其他时钟管理组件。 3. 对于每个外设,您需要根据所需的时钟频率配置相应的分频器。这可以通过编程分频器寄存器来实现。 以下是一个简化的示例,展示了如何为 SPI、定时器和 I2C 配置不同的时钟频率: ```c #include "stm32f1xx_hal.h" void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct; RCC_ClkInitTypeDef RCC_ClkInitStruct; RCC_PeriphCLKInitTypeDef PeriphClkInitStruct; // 1. 配置系统时钟源 RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; HAL_RCC_OscConfig(&RCC_OscInitStruct); // 2. 配置系统时钟 RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2); RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2); // 3. 配置外设时钟 PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_SPI1 | RCC_PERIPHCLK_TIM1 | RCC_PERIPHCLK_I2C1; PeriphClkInitStruct.SPI1ClockSelection = RCC_SPI1CLKSOURCE_PLL_DIV2; // SPI1 时钟频率 = PLL / 2 = 4MHz PeriphClkInitStruct.TIM1ClockSelection = RCC_TIM1CLK_HCLK; // 定时器 1 时钟频率 = HCLK = 16MHz PeriphClkInitStruct.I2C1ClockSelection = RCC_I2C1CLKSOURCE_SYSCLK; // I2C1 时钟频率 = SYSCLK = 8MHz HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct); } int main(void) { HAL_Init(); SystemClock_Config(); // 初始化 SPI、定时器和 I2C 外设 while (1) { // 执行外设操作 } } ``` 请注意,这个示例使用了 STM32F1xx 系列微控制器。您需要根据您的具体硬件平台和开发环境进行相应的调整。 总之,要为不同的外设配置不同的时钟频率,您需要: 1. 确定系统时钟源和可用的时钟频率。 2. 配置时钟树,以便为不同的外设提供所需的时钟频率。 3. 为每个外设配置相应的分频器。 |
|
|
|
只有小组成员才能发言,加入小组>>
TLE9879_BLDC电机启动需要用手拨一下才能转动,怎么解决?
5362 浏览 2 评论
4071 浏览 9 评论
请问TLE5012B_E1000 启动后为什么位置不能正确获取
3588 浏览 9 评论
1203 浏览 8 评论
3491 浏览 7 评论
409浏览 2评论
241浏览 2评论
350浏览 2评论
TLE9879_BLDC电机启动需要用手拨一下才能转动,怎么解决?
5373浏览 2评论
如果是打开已有的dave工程,怎么查看这个工程选择的mcu型号?
411浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-21 22:52 , Processed in 0.662381 second(s), Total 78, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号