新手入门
- 积分
- 16
- 金钱
- 16
- 注册时间
- 2023-6-30
- 在线时间
- 5 小时
|
楼主 |
发表于 2023-10-24 18:22:15
|
显示全部楼层
本帖最后由 2459268395 于 2023-10-24 18:28 编辑
不知道为啥,我没看到我的问题显示出来。
问题:【H743-ADC】正点原子的阿波罗H743-adc第一个实验代码以及开发指南是不是写错了,麻烦各位大佬仔细看下我的过程,里面我将说到为什么我会说它会写错,也说到了我对源码的分析,我实在想不明白我哪里错了,我所有3金钱。。。。麻烦各位了!!!!
g_adc_handle.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2; /* 2 分频,ADCCLK=PER_CK/2=64/2=32MHZ */
在这段代码是stm32H743开发指南中ADC的第一个实验,对此它的解释如下:
-----------------------------------------------------------------------------------------------------------------------------------
该寄存器本章只需要用到 PRESC[3:0]这四个位,用于设置 ADC 时钟的预分频系数(即对adc_ker_ck的分频系数),由上图可以得到这四个位域的值的含义可以表示为设置2^PRESC[3:0]分频。
adc_ker_ck 的时钟源由 RCC_D3CCIPR 寄存器的 ADCSEL[1:0]位配置。
本章的实验我们都设置 ADCSEL[1:0]=2,即选择 per_ck 作为时钟源,而 per_ck 又由 RCC_D1CCIPR 寄存器的CKPERSEL[1:0]位选择,默认为 0,即选择 hsi_ker_ck(64MHz)作为 per_ck。
因此:adc_ker_ck=per_ck=hsi_ker_ck=64MHz。又由于 ADC 的输入时钟频率不能大于 36M,所以,我们需要设置 PRESC[3:0]=1,即可得到 ADC 输入时钟频率为:adc_ker_ck/2^PRESC[3:0]=64/2=32MHz。
-------------------------------------------------------------------------------------------------------------------------------------
它的解释没有错,将per_ck作为时钟源,而又将hsi_ker_ck作为per_ck,而又因为设置的hsi=64MHZ,所以二分频。
可是在正点原子的HAL库讲解中说到:你要将per_ck作为时钟源的话,就要使用异步时钟模式,也就是将CKMODE[1:0]设置为00,如下如所示
那么问题来了:
正点原子设置ADC时钟的代码是:g_adc_handle.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2; /* 2 分频,ADCCLK=PER_CK/2=64/2=32MHZ */
也就是使用同步模式,并设置为二分频。
这样的话不就和解释相矛盾了吗?正确来说不应该是:g_adc_handle.Init.ClockPrescaler=ADC_CLOCK_ASYNC_DIV2,也就是使用异步时钟模式并二分频吗,只有使用了异步模式才能进一步选择adc的时钟源吧。
并且我在查看”g_adc_handle.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2;“源码中,发现这个语句就是单纯的设置同步异步模式以及分频。并没有涉及到h743开发指南里面的设置per_ck作为adc的时钟源,然后hsi_ker_ck又作为per_ck。我不知道是不是我分析错了,有关源码的分析,我放在了附件里。
最后,最为神奇的是,我这样设置:g_adc_handle.Init.ClockPrescaler = ADC_CLOCK_ASYNC_PCLK_DIV2;adc采集不出来数据,采集为0,只有设置成正点原子的g_adc_handle.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2; 才采集出来数据,是不是很神奇,然后我看了下正点原子的adc的代码,里面除了上面的设置,也没有涉及到adc时钟源的设置了,我不明白它哪里设置了时钟源为per_ck以及hsi_ker_ck作为per_ck.
有没有大佬帮忙解释一下,已经困惑了我好几天,我看正点原子的视频里面提到的也只是f103的例程,并没有涉及到h743。
附件有我的源码分析以及正点原子的源码,麻烦各位大佬了!
阿波罗STM32H743开发指南:589页,代码分析598页。 |
|