OpenEdv-开源电子网

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

我的程序(点错了,本来是想接在上个帖子后面的)

[复制链接]

4

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2011-9-15
在线时间
9 小时
发表于 2011-9-25 00:14:46 | 显示全部楼层 |阅读模式
 

这我的程序,写的应该是延时一秒的,可实际却3秒左右。。。。大家帮忙看看。。到底咋回事啊。。。。。

。。。。。。。。。点错了。。。点成发帖了。。。本来想接在我上个帖子后面的。。失误了。。。不好意思。。。

#include "stm32f10x.h"
 
 // 声明结构体
 GPIO_InitTypeDef GPIO_InitStructure; //此句话定义了一个名字叫GPIO_InitStructure的结构体


/*void SysTick_Configuration(void)
{
 SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);//设置时钟源为HCLK
} */
 //2.0库设置方法。。。
//void us_delay(u32 n)
//{
// u32 flag;
// SysTick_SetReload(72000*n);
// SysTick_CounterCmd(SysTick_Counter_Clear);
// SysTick_CounterCmd(SysTick_Counter_Enable);
//  do
// {
//  flag=SysTick_GetFlagStatus(SysTick_FLAG_COUNT);
// }while(flag!=1);
// SysTick_CounterCmd(SysTick_Counter_Disable);
// }

 u8 us;
 u16 ms;

void delay_init()
{
 SysTick->CTRL&=0xfffffffb;
  us=9;
  ms=(u16)us*1000;
}

void delay_us(u32 n)
{
 u32 temp;
 SysTick->LOAD=n*us;
 SysTick->VAL=0x00;
 SysTick->CTRL=0x01;
// do
// {temp=(SysTick->CTRL)>>16;
// }while(temp!=1);
 do
 {
  temp=SysTick->CTRL;
 }
 while(temp&0x01&&!(temp&(1<<16)));//等待时间到达
 SysTick->CTRL=0x00;
 SysTick->VAL=0x00;

}

void delay_ms(u16 n)
{
 u32 temp;
 SysTick->LOAD=(u32)n*ms;
 SysTick->VAL=0x00;
 SysTick->CTRL=0x01;
// do
// {temp=(SysTick->CTRL)>>16;
// }while(temp!=1);
 do
 {
  temp=SysTick->CTRL;
 }
 while(temp&0x01&&!(temp&(1<<16)));//等待时间到达
 SysTick->CTRL=0x00;
 SysTick->VAL=0x00;

}  

 

 


 void GPIO_Configuration(void)

 {

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 ;     //第二个引脚
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;    //推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_Init(GPIOD,&GPIO_InitStructure);
 
  }
 

int main(void)
{  
  
 
   //使能线上时钟,
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);//使能IO口A和D
  GPIO_Configuration ();//GPIO初始化
  delay_init(72);
 
   
 
  while (1)
  {
  
   GPIO_ResetBits(GPIOD,GPIO_Pin_2);  //D2口置位即输出高电平
   delay_ms(1000);
  
   GPIO_SetBits (GPIOD,GPIO_Pin_2);
    delay_ms(1000);
 
  }
}



 

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2011-9-25 01:10:47 | 显示全部楼层
回复【楼主位】wx837078933:
---------------------------------
用我写的不行么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2011-9-15
在线时间
9 小时
 楼主| 发表于 2011-9-25 11:07:26 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
延时这块。。放到你的程序里没问题。而且也是参考你的程序写的。。但我现在要用库。。3.5的库时钟初始化是默认设置到的72M。。。。单出问题了。。。我就像弄明白用库函数的这个初始化有什么问题。。。而且,刚开始也想向您那样直接操作寄存器写程序。。。。但。。发现有很多东西都不懂,不知道该怎么设置,就比方说始终初始化那个Dinit()函数。。我就不知道问什么那样设置,查资料也没找到具体的说明。。。后来实在不行了。。就决定先用库函数了,,等学的多了在怎么操作研究寄存器。。哎。。。用库也有问题。。。郁闷啊。。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2011-9-25 20:12:32 | 显示全部楼层
回复【3楼】wx837078933:
---------------------------------
我觉得用寄存器还好些,有据可循。至于你不懂的地方,查《STM32参考手册》一般就可以找到原因了,不行的在《cm3权威指南》也有答案。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

13

主题

73

帖子

0

精华

初级会员

Rank: 2

积分
147
金钱
147
注册时间
2011-7-2
在线时间
3 小时
发表于 2011-9-25 21:55:35 | 显示全部楼层
你的这个函数就是错的:
void delay_init()
{
 SysTick->CTRL&=0xfffffffb;
  us=9; 
  ms=(u16)us*1000;


在int main(void)
{  
  
  
   //使能线上时钟,
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);//使能IO口A和D
  GPIO_Configuration ();//GPIO初始化
  delay_init(72);  ??// 这个72的参数就是没有根据的。虽然原子哥的是这样的用法,但他定义时是带参数的函数;如果一定要按你的函数定义的用就要void delay_init(void);在主程序是调用delay_init();不要带参数;
  
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2011-9-25 22:27:12 | 显示全部楼层
如果他的系统时钟频率是72M的话,这样设置也是没问题的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2011-9-15
在线时间
9 小时
 楼主| 发表于 2011-9-28 10:49:52 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
问题解决了。。不是程序的问题。。。。是keil设置C++选项的时候。。宏错了。。。应该是STM32F10X_MD。。。。对于同样适用3.5库的朋友们一定要注意啊!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 同样谢谢楼上朋友和原子哥的帮助!
回复 支持 反对

使用道具 举报

4

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2011-9-15
在线时间
9 小时
 楼主| 发表于 2011-9-28 10:50:30 | 显示全部楼层
回复【5楼】hpy6666:
---------------------------------
我就仅是按照72MHZ初始化的。。。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2011-9-28 12:48:09 | 显示全部楼层
回复【7楼】wx837078933:
---------------------------------
用库还真是莫名其妙的有问题.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-24 03:52

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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