Discuz! REAL TIME TECHNOLOGY

 找回密码
 立即注册
查看: 30743|回复: 20
打印 上一主题 下一主题

STM32F207单片机时钟

[复制链接]

45

主题

0

好友

1639

积分

金牌会员

Rank: 6Rank: 6

跳转到指定楼层
楼主
发表于 2013-5-17 11:52:39 |只看该作者 |倒序浏览
在HID固件中,有一个延时函数,如下:
/*
* usbd_stm32_delay
* Parameters: delay: Delay
* Return Value: None
*/
void usbd_stm32_delay (U32 delay) {
     delay *= SystemCoreClock / 100000;
    while (delay--) {
        __nop(); __nop(); __nop(); __nop(); __nop(); __nop(); __nop(); __nop();
    }
}


调用时,参数为1000时延时10毫秒,这样计算出的SystemCoreClock是否就是最快时钟信号
回复

使用道具 举报

45

主题

0

好友

1639

积分

金牌会员

Rank: 6Rank: 6

沙发
发表于 2013-5-17 11:57:45 |只看该作者
这个在定义时,显示:
uint32_t SystemCoreClock; /*!< System Clock Frequency (Core Clock) */

回复

使用道具 举报

405

主题

0

好友

6581

积分

内部组员

Rank: 8Rank: 8

活跃会员 论坛元老

板凳
发表于 2013-5-17 13:05:52 |只看该作者
ahwwq 发表于 2013-5-17 11:57
这个在定义时,显示:
[mw_shl_code=c,true]uint32_t SystemCoreClock; /*!< System Clock Frequency (Core ...

不是调用延时函数
是对IO进行设置1和0,比如对A口bit0进行设置
while(1)
{  IOA |= 0x01;
   IOA  &=0xFE;
}
或者
while(1)
{
IOA ^= 0x01;
}
回复

使用道具 举报

405

主题

0

好友

6581

积分

内部组员

Rank: 8Rank: 8

活跃会员 论坛元老

地板
发表于 2013-5-20 10:50:43 |只看该作者
Wjianw 发表于 2013-5-17 13:05
不是调用延时函数
是对IO进行设置1和0,比如对A口bit0进行设置
while(1)

STM32 GPIO 置位 复位 功能实现  
[tr][td] GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
        GPIOX=GPIOA~GPIOG;
        GPIO_Pin=GPIO_Pin_0 ~ GPIO_Pin_15;
例:

GPIO_ResetBits(GPIOB,GPIO_Pin_5);//将PORTB.5 = 0;
GPIO_SetBits(GPIOB,GPIO_Pin_8);//将PORTB.8 = 1;

回复

使用道具 举报

405

主题

0

好友

6581

积分

内部组员

Rank: 8Rank: 8

活跃会员 论坛元老

5#
发表于 2013-5-20 11:12:57 |只看该作者
Wjianw 发表于 2013-5-20 10:50
STM32 GPIO 置位 复位 功能实现  

GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

STM32 入门之 GPIO 置位复位

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

回复

使用道具 举报

405

主题

0

好友

6581

积分

内部组员

Rank: 8Rank: 8

活跃会员 论坛元老

6#
发表于 2013-5-20 11:25:55 |只看该作者
Wjianw 发表于 2013-5-20 11:12
STM32 入门之 GPIO 置位复位

2篇关于GPIO编程的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

回复

使用道具 举报

44

主题

0

好友

4124

积分

内部组员

Rank: 8Rank: 8

7#
发表于 2013-5-20 20:07:18 |只看该作者
说明:
1,这个是目前用于STM32F107芯片的、调试GPIO的翻转频率的一个程序。主要是在开发板中的“LED灯闪烁实验(裸机)”基础上做了相应修改。我所做的修改主要是添加了GPIO的P13口作为测试脚。其他的修改在程序中使用汉语注释了。
2,经过调试,发现IO口的输出频率总是在2M ~ 2.5M左右。并且在LED上输出测试的时候,波形的周期会比在Pin 13上输出的略大,稍微大40~50ns(估算)。
3,目前,将问题锁定在 main.c中的main 程序的“System_Setup( ) 函数的设置上”。也就是system32f107.h文件夹中的System_Setup( )函数,其中所调用的 “SystemInit()”函数是 system_stm32f10x.c 文件中的一个设置函数,目前我们还没有深入了解。问题很可能就出现在这个函数中。
4,在傍晚王老师调试之后,为了寻找方便,我在main.c 中添加“#include "stm32f107.h"”语句。


5,简单提示,使用Keil uVision 4 运行本程序的步骤为:首先压缩包 >>> 打开文件夹 >>> 打开“Project”文件夹 >>> 打开“RVMDK”文件夹 >>>  打开“Project.uvproj”文件 >>> 编写或修改程序 >>> 组建 >>> 点击“Start Debug Session”(如果没有调试器的话,只能软件仿真,点击“Use Simulator”即可)。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

回复

使用道具 举报

44

主题

0

好友

4124

积分

内部组员

Rank: 8Rank: 8

8#
发表于 2013-5-20 20:13:35 |只看该作者
对了,补充一点:
    如果把System_Setup( ) 函数 注释掉之后,测量引脚上的输出,此时周期变为 5K 左右。
当把这个函数恢复之后,引脚输出的周期大概为 2M ~2.5M。所以,几乎是5倍关系。
    然而,在外设端口的时钟枚举中,只有2M、10M、50M三个参数可选。它们也是5倍关系。具体原因,暂时不明。
回复

使用道具 举报

405

主题

0

好友

6581

积分

内部组员

Rank: 8Rank: 8

活跃会员 论坛元老

9#
发表于 2013-5-20 21:36:42 |只看该作者
DXiaoFei 发表于 2013-5-20 20:13
对了,补充一点:
    如果把System_Setup( ) 函数 注释掉之后,测量引脚上的输出,此时周期变为 5K 左右。 ...

研究STM32的时钟构成了SystemInit()函数

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

回复

使用道具 举报

45

主题

0

好友

1639

积分

金牌会员

Rank: 6Rank: 6

10#
发表于 2013-5-21 10:34:33 |只看该作者
工程修改:GPIO的赋值语句修改:
这是移位后或运算赋值对应的汇编

这是移位直接赋值对应的汇编

这是直接赋值十六进制对应的汇编


利用上述最后一种赋值方式,最新测的STM32F207 I/O翻转频率

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

回复

使用道具 举报

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

Archiver|手机版|Real Time Group

GMT+8, 2025-3-16 03:16 , Processed in 0.030276 second(s), 19 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部