OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2622|回复: 11

C8T6移植到RCT6发现工作不正常

[复制链接]

15

主题

78

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
409
金钱
409
注册时间
2017-2-21
在线时间
159 小时
发表于 2019-5-9 10:29:37 | 显示全部楼层 |阅读模式
5金钱
拿到一个学长的adc的采集的一个工程但是版本好像比较早了从时钟文件看  * @file    system_stm32f10x.c   * @version V3.3.0但是移植之后就是ADC直接不工作。其他的我自己试过了没有问题的,就是时钟这个地方不行,我现在是直接移植到原子的RCT6的min板上感觉是时钟部分有点问题,但是自己又发现不了问题,adc时钟什么的都是可以打开的,没有问题的,特意附上之前工程的时钟处理部分函数请教一下高手

最佳答案

查看完整内容[请看2#楼]

先测一下时钟吧,百度看看怎么用KEIL测运行时钟频率。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

16

主题

76

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
327
金钱
327
注册时间
2019-3-11
在线时间
50 小时
发表于 2019-5-9 10:29:38 | 显示全部楼层
先测一下时钟吧,百度看看怎么用KEIL测运行时钟频率。
回复

使用道具 举报

15

主题

78

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
409
金钱
409
注册时间
2017-2-21
在线时间
159 小时
 楼主| 发表于 2019-5-9 10:31:10 | 显示全部楼层
[mw_shl_code=c,true]void RCC_SET(void)
{       
        ErrorStatus HSEStartUpStatus;
         
       
        RCC_DeInit();       /* 重置了RCC的设置,类似寄存器复位 */
          
   
        RCC_HSEConfig(RCC_HSE_ON); /* 使能外部高速晶振 */
          
   
        HSEStartUpStatus = RCC_WaitForHSEStartUp();/* 等待高速晶振稳定 */
   
        if (HSEStartUpStatus == SUCCESS)
        {
            /* 使能flash预读取缓冲区 */
            FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
            /* 令Flash处于等待状态,2是针对高频时钟的,这两句跟RCC没直接关系,可以暂且略过 */
            FLASH_SetLatency(FLASH_Latency_2);

                /* HCLK = SYSCLK 设置高速总线时钟=系统时钟*/
            RCC_HCLKConfig(RCC_SYSCLK_Div1);

                /* PCLK2 = HCLK 设置低速总线2时钟=高速总线时钟*/
            RCC_PCLK2Config(RCC_HCLK_Div1);

                /* PCLK1 = HCLK/2 设置低速总线1的时钟=高速时钟的二分频*/
            RCC_PCLK1Config(RCC_HCLK_Div2);

                /* ADCCLK = PCLK2/6 设置ADC外设时钟=低速总线2时钟的六分频*/
            RCC_ADCCLKConfig(RCC_PCLK2_Div6);

                /* Set PLL clock output to 72MHz using HSE (8MHz) as entry clock */
            //上面这句例程中缺失了,但却很关键
                /* 利用锁相环讲外部8Mhz晶振9倍频到72Mhz */
            RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);

                /* Enable PLL 使能锁相环*/
            RCC_PLLCmd(ENABLE);

                /* Wait till PLL is ready 等待锁相环输出稳定*/
            while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
            {}

                /* Select PLL as system clock source 将锁相环输出设置为系统时钟 */
            RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

                /* Wait till PLL is used as system clock source 等待校验成功*/
            while (RCC_GetSYSCLKSource() != 0x08)
            {}
        }

          /* ADCCLK = PCLK2/4 */
          RCC_ADCCLKConfig(RCC_PCLK2_Div4);
   
          /* Enable peripheral clocks ------------------------------------------------*/
          /* Enable DMA1 clocks */
          RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);

          /* Enable ADC1, ADC2, ADC3 and GPIOC clocks */
          RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOC |
                         RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1 |
                         RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);

        RCC_APB1PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);

}[/mw_shl_code]
回复

使用道具 举报

0

主题

79

帖子

0

精华

高级会员

Rank: 4

积分
727
金钱
727
注册时间
2016-5-27
在线时间
91 小时
发表于 2019-5-9 10:39:37 | 显示全部楼层
像这种问题一般不是程序问题。
1. 确认原来的是寄存器版还是库函数版(一般都是库函数版,寄存器版很少有问题)
2. 看启动文件了,用正确的启动文件(L,M,H)。
3. 是库函数版,就要看启动文件中是不是注释掉了 SystemInit  (一般时钟不对就是这里)
   就是 LDR     R0, =SystemInit 这句话一定要有。
回复

使用道具 举报

15

主题

78

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
409
金钱
409
注册时间
2017-2-21
在线时间
159 小时
 楼主| 发表于 2019-5-9 11:54:55 | 显示全部楼层
www88988 发表于 2019-5-9 10:39
像这种问题一般不是程序问题。
1. 确认原来的是寄存器版还是库函数版(一般都是库函数版,寄存器版很少有 ...

第一感觉,我也是觉得程序绝对没有问题,应该是什么配置文件中被改了,这个是库函数版本的,我也查了好多遍启动文件,除了RCT6的启动文件中的映射地址比较多,其他的核心地方的语句是一模一样的,我也仔细看了您说的的那句话,那个是有的,没有被屏蔽
回复

使用道具 举报

15

主题

78

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
409
金钱
409
注册时间
2017-2-21
在线时间
159 小时
 楼主| 发表于 2019-5-9 13:29:16 | 显示全部楼层
自己顶一下
回复

使用道具 举报

0

主题

79

帖子

0

精华

高级会员

Rank: 4

积分
727
金钱
727
注册时间
2016-5-27
在线时间
91 小时
发表于 2019-5-9 14:05:13 | 显示全部楼层

咱们的程序都是用的8M的外频,看看源程序是不是外频用的8M倍频72M?
回复

使用道具 举报

15

主题

78

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
409
金钱
409
注册时间
2017-2-21
在线时间
159 小时
 楼主| 发表于 2019-5-9 14:15:24 | 显示全部楼层
www88988 发表于 2019-5-9 14:05
咱们的程序都是用的8M的外频,看看源程序是不是外频用的8M倍频72M?

上面的那段时钟是我一直到RCT6当中的,之前是在C8T6当中,但是外部的晶振都是使用的8M的,这个我清楚的,因为c8t6的那个板子我在用的,是8M的晶振。
回复

使用道具 举报

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4306
金钱
4306
注册时间
2018-6-30
在线时间
808 小时
发表于 2019-5-9 15:15:06 | 显示全部楼层
你参考这个看下,程序移植:http://www.openedv.com/forum.php?mod=viewthread&tid=289461
业精于勤荒于嬉;行成于思毁于随!
回复

使用道具 举报

0

主题

79

帖子

0

精华

高级会员

Rank: 4

积分
727
金钱
727
注册时间
2016-5-27
在线时间
91 小时
发表于 2019-5-9 18:19:33 | 显示全部楼层
usb123 发表于 2019-5-9 14:15
上面的那段时钟是我一直到RCT6当中的,之前是在C8T6当中,但是外部的晶振都是使用的8M的,这个我清楚的, ...

先在mini板上跑个功能相近的例子,排除mini板是否有问题。再看看是不是移过来把IO口弄错了。C8T6和RCT6除了IO口和外设、RAM和FLUSH多点以外都是一样的。不应该有问题的。
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2019-5-16
在线时间
0 小时
发表于 2019-5-16 23:28:17 | 显示全部楼层
为什么所有人都用库函数版,你们说的都是库函数版解决办法,寄存器版的该怎么移植呢?
回复

使用道具 举报

31

主题

1955

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4522
金钱
4522
注册时间
2018-5-11
在线时间
947 小时
发表于 2019-5-17 11:14:19 | 显示全部楼层
JK123456789 发表于 2019-5-16 23:28
为什么所有人都用库函数版,你们说的都是库函数版解决办法,寄存器版的该怎么移植呢?

寄存器版一般不会出现移植问题
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-19 10:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表