这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » (SD卡+FATFS,进行中)zangchao ARM DIY进程帖

共92条 4/10 |‹ 2 3 4 5 6 7 ›| 跳转至
工程师
2012-04-09 23:35:48     打赏
31楼

#include <stm32f10x_lib.h>
#include "sys.h"
#include "usart.h"  
#include "delay.h" 
#include "led.h"
#include "key.h"   
  
int main(void)
{         
 u8 t;  
 Stm32_Clock_Init(9); //系统时钟设置
 delay_init(72);      //延时初始化
 LED_Init();      //初始化与LED连接的硬件接口
 KEY_Init();          //初始化与按键连接的硬件接口
 while(1)
 {
  t=KEY_Scan();//得到键值
     if(t)
  {        
   switch(t)
   {    
    case 1:
     LED0=!LED0;
                                        LED2=!LED2;
     break;
    case 2:
     LED1=!LED1;
                                        LED3=!LED3;
     break;
    case 3:    
     LED0=!LED0;
     LED1=!LED1;
                                        LED2=!LED2;
     LED3=!LED3;
     break;
   }
  }else delay_ms(10);
 } 
}


工程师
2012-04-09 23:37:13     打赏
32楼

按键子程序
#include <stm32f10x_lib.h>
#include "key.h"
#include "delay.h"
////////////////////////////////////////////////////////////////////////////////// 
//********************************************************************************
//V1.1修改说明
//修改按键扫描函数,使整个代码可以支持SWD下载。
//////////////////////////////////////////////////////////////////////////////////   
           
//按键初始化函数
//特别注意:在该函数之后,JTAG将无法使用(SWD也无法使用)
//如果想JTAG仿真,可以屏蔽该函数。
//PA0.PC13.PF11 设置成输入
void KEY_Init(void)
{
 
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE);//使能APB2外设GPIOF时钟
       
        //RCC->APB2ENR|=1<<2;     //使能PORTA时钟
        //RCC->APB2ENR|=1<<4;     //使能PORTC时钟 

 GPIOA->CRL&=0XFFFFFFF0;//PA0设置成输入  
 GPIOA->CRL|=0X00000008;  
 GPIOC->CRH&=0XFF0FFFFF;//PC13设置成输入  
 GPIOC->CRH|=0X00800000;
 GPIOF->CRH&=0XFFFF0FFF;//PF11设置成输入  
 GPIOF->CRH|=0X00008000;     
 GPIOC->ODR|=1<<13;    //PC13上拉,PA0默认下拉
 GPIOF->ODR|=1<<11;    //PF11上拉
}
//按键处理函数
//返回按键值
//0,没有任何按键按下
//1,KEY0按下
//2,KEY1按下
//3,KEY2按下 WK_UP
//注意此函数有响应优先级,KEY0>KEY1>KEY2!!
u8 KEY_Scan(void)

 static u8 key_up=1;//按键按松开标志 
 JTAG_Set(JTAG_SWD_DISABLE);
 if(key_up&&(KEY0==0||KEY1==0||KEY2==1))
 {
  delay_ms(10);//去抖动
  key_up=0;
  if(KEY0==0)
  {
   JTAG_Set(SWD_ENABLE);
   return 1;
  }
  else if(KEY1==0)
  {
   JTAG_Set(SWD_ENABLE);
   return 2;
  }
  else if(KEY2==1)
  {
   JTAG_Set(SWD_ENABLE);
   return 3;
  }
 }else if(KEY0==1&&KEY1==1&&KEY2==0)key_up=1;     
 JTAG_Set(SWD_ENABLE);
 return 0;// 无按键按下
}


工程师
2012-04-09 23:38:22     打赏
33楼

LED子程序
#include <stm32f10x_lib.h>   
#include "led.h"
////////////////////////////////////////////////////////////////////////////////           
//////////////////////////////////////////////////////////////////////////////////    

//初始化PE2,3,4,5为输出口.并使能这4个口的时钟     
//LED IO初始化
void LED_Init(void)
{
 RCC->APB2ENR|=1<<6;    //使能PORTE时钟       
 //RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);   
 GPIOE->CRL&=0XFF0000FF;
 GPIOE->CRL|=0X00333300;//PE2,3,4,5 通用推挽输出    
        GPIOE->ODR|=1<<8;      //PE2,3,4,5 输出高
            
}


工程师
2012-04-10 13:42:42     打赏
34楼
多谢,串口通信也已经调试通过,稍后把演示视频上传

工程师
2012-04-10 16:07:31     打赏
35楼
       由于今天要调试串口的通信,而买的MAX3232是国产的,根本无法使用,很是郁闷!看了一些资料,把外围电容换成有极性的电容,而由于封装固定为0603找不到合适的电容焊接。
      后来发现增大电容也有可能解决问题,于是把电容值换成了10uF(这次做DIY,配的10uF的电容还是有富余的),用万用表测量了相关电容的电压值,发现有很大变化,两端的电压值都有明显提高。然后,着急把串口连接上,用串口下载软件(ST的官方软件)一测试果然可以识别芯片了,很是高兴啊!!!
      经过验证:仅需要将C39、C40替换即可解决问题,不用花钱换进口3232了,也免去了重复拆焊造成焊盘脱落的危险了。目前串口通信正常!
      申请加精华啊!!!嘿嘿

工程师
2012-04-10 16:15:51     打赏
36楼
解决问题的支持下啊

工程师
2012-04-10 23:56:28     打赏
37楼
我一直用串口下载程序,用了两天了,昨天一直连着电脑搞串口通信,应该没有问题。本来想用1uF的,可手头没有,就尝试了下10uF的。

工程师
2012-04-11 13:59:17     打赏
38楼
不应该吧,我这里用的挺好。要是你的3232频繁烧坏,我还是建议你检查周围电路的焊接情况。

工程师
2012-04-11 14:00:21     打赏
39楼
就是尝试下,没有办法的买的件不好

工程师
2012-04-11 14:01:26     打赏
40楼

呵呵,好的,解决后支持下啊


共92条 4/10 |‹ 2 3 4 5 6 7 ›| 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]