这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » wenyangzeng ARM DIY进程贴 红外解码

共107条 1/11 1 2 3 4 5 6 ›| 跳转至

wenyangzeng ARM DIY进程贴 红外解码

工程师
2012-04-03 14:35:26     打赏
              wenyangzeng的进程表 (点击进入)

     1、GPIO  EXTI中断                                              
    
2、LCD  I/O 3.3V驱动5V LCD                             
    
3、超声波测距                                                   
    
4、ADC                                                             
    
5、RTC                                                               
    
6、USART                                                         
    
7、I2C                                                                
     
8、SD卡读FAT文件                                             
    
9、三相正弦波发生器                                             
     
10、CAN双机通信 
    
11、USB虚拟鼠标
     12、USB虚拟串口
     13、读取CPU唯一码 
    
14、USB读卡器
     15、uCOS-II移植 
     
16、以太网
     17、DAC        
      18、RC5格式红外遥控解码
      19、DIY过程经验分享

开贴:硬件篇

 
     ARM开发板DIY终于开始动手开工了。购到基础包后,找了一片PC机废主板。那些0602封装的电阻和电容大部分都找到了,只是10uF无极性电容是1206封装的。DIY板上有的设计成0805封装,有的是0602封装。使之有点不方便,其实板上空间还很宽裕,把10uF电容画成1206封装的,会更方便DIY者。

   焊接工具是一把外热式30W尖头电烙铁,把STM32F103ZET6在板上位置摆正,在对角引脚各焊上一点焊锡固定住芯片,然后用烙铁头将焊锡丝拖焊过芯片四周引脚,出现连焊的引脚用屏蔽线的屏蔽层铜丝吸干净。焊接效果感觉还不错,见上传图片。我拿到的STM32F103ZET6是没有防静电包装的,估计商家将片子暴露在空气中许久,引脚有的已经氧化发黑,在照片中我保留下左下角发黑的引脚不作处理清理。
  板上那只32K晶振如果能设计成卧式安装,可以避免容易折断引脚的毛病,同时晶振外壳能接地,可靠性会更好。




关键词: wenyangzeng     进程     红外     解码    

院士
2012-04-04 08:13:39     打赏
2楼
好像没说完啊

工程师
2012-04-04 09:28:17     打赏
3楼
      遇到点问题,通电前为安全起见,测量了一下3.3V与GND间阻值,发现只有360欧姆,不敢通电,到现在还没有查出问题所在,就怕拿到的STM32F103ZET6是有问题的,或者PCB板哪里连线了,CPU已经焊上去了,实在头疼。
           花了半天时间检查PCB板和MCU引脚焊点,没有发现异常。将商家发错封装的3.3V稳压IC拆下,3.3V供电端对地电阻上升到5.8KΩ,测量稳压IC的1-2端阻值为350Ω,这两端就是3.3V输出端,如此低的电阻要消耗掉近10mA空载电流。当MCU进入睡眠状态时,整机耗电还是要达到10mA的。找了1只原装AMS1117测量,其1-2端阻值竟达到78KΩ,赶紧换上新的IC。通电,一切正常。



工程师
2012-04-05 13:33:00     打赏
4楼


        我用的编译环境是KEIL4.12,STM32的库是3.5版,下载工具是J-LINK。赶紧试看看下载跑马灯例程到芯片中能否成功--一切正常。至此,ARM DIY的硬件工作基本告一段落。


工程师
2012-04-05 13:35:07     打赏
5楼


                  跑马灯可以工作了。
  从下一贴开始经进入软件编程。

院士
2012-04-05 15:04:56     打赏
6楼
楼主,我是将32K的晶振放到了PCB板的背面了。
那个东西“站着”有点悬吧~~

工程师
2012-04-05 16:00:08     打赏
7楼
楼上你的主意倒是不错。

工程师
2012-04-08 13:03:09     打赏
8楼

ARM DIY进程:GPIO的练习内容(以库操作方式):

1、配置CPU工作频率;
2、配置GPIO的输入或输出功能;
3、以位操作方式控制流水灯的亮灭;
4、以外部中断方式控制流水灯的闪烁花样。
   如果照搬示范例程代码玩一玩跑马灯,并未真正学习到如何用库操作方式来操作相关的寄存器。本练习将DIY板上的轻触开关S2作为控制键,以中断方式来控制跑马灯闪烁的花样,从中学习到EXTI中断的操作技巧。从原理图上可知S2接GPIOC的I/O口13,故设GPIOC_PIN13为上拉输入,外部中断模式,下降沿触发中断,连接到13号中断线,中断入口为EXTI15_10_IRQn。过程需要对配置系统时钟,开放APB2相关总线,对NVIC、GPIO、RCC等寄存器进行操作,还要修改Stm32f10x_it.c文件里头关于EXTI15_10_IRQn入口函数的内容修改。在整个过程中学到了很多有用的基础知识。
    在程序调试过程中刚开始找不到EXTI中断入口函数在哪里,也不知道Pin_13对应的中断入口函数是在EXTI15_10_IRQn,所以进入不了EXTI中断函数。后来通过认真查阅ST相关资料,理解清楚工作原理后,终于能进入EXTI中断函数。接下来又遇到进入中断后,尽管及时清除了中断标志位,在没有继续按键的情况下,程序则一直进入EXTI中断,根本无法去控制跑马灯的正常工作。只能再查阅相关资料和示范例程,弄明白这与开放APB2的相关寄存器有关,终于完成程序的调试。
    程序演示如果拍照片要很多幅图片,就不上传了,闪烁逻辑图见下表:


工程师
2012-04-08 13:05:20     打赏
9楼

主函数代码:
#include "stm32f10x.h"
#define LED1_ON  GPIO_ResetBits(GPIOE, GPIO_Pin_2)
#define LED1_OFF GPIO_SetBits(GPIOE, GPIO_Pin_2)

#define LED2_ON  GPIO_ResetBits(GPIOE, GPIO_Pin_3)
#define LED2_OFF GPIO_SetBits(GPIOE, GPIO_Pin_3)

#define LED3_ON  GPIO_ResetBits(GPIOE, GPIO_Pin_4)
#define LED3_OFF GPIO_SetBits(GPIOE, GPIO_Pin_4)

#define LED4_ON  GPIO_ResetBits(GPIOE, GPIO_Pin_5)
#define LED4_OFF GPIO_SetBits(GPIOE, GPIO_Pin_5)

u16   Count=0;
RCC_ClocksTypeDef RCC_ClockFreq;
 void Delay(u16 speed)
{
 u16 i;
 while(speed!=0)
 {
  speed--;
  for(i=0;i<400;i++);
 }
}

int main(void)
{   u16 speed=2000;
 NVIC_InitTypeDef NVIC_InitStructure;
 GPIO_InitTypeDef GPIO_InitStructure;
 EXTI_InitTypeDef EXTI_InitStructure;
 SystemInit();
 RCC_GetClocksFreq(&RCC_ClockFreq);
 NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
 NVIC_Init(&NVIC_InitStructure); 
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOE|RCC_APB2Periph_AFIO, ENABLE);
 // PE2,3,4,5输出
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; //开漏输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //50M时钟速度
 GPIO_Init(GPIOE, &GPIO_InitStructure);
  //PC13上拉输入
 GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_13;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; 
 GPIO_Init(GPIOC, &GPIO_InitStructure);
 // 连接IO口到中断线
 GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource13);
 EXTI_InitStructure.EXTI_Line = EXTI_Line13;
 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
 EXTI_InitStructure.EXTI_LineCmd = ENABLE;
 EXTI_Init(&EXTI_InitStructure); 

  while (1)
  {   switch(Count)
   {
     case 0:
     {
   LED1_ON;
   Delay(speed);
   LED1_OFF;
   LED2_ON;
   Delay(speed);
   LED2_OFF;
   LED3_ON;
   Delay(speed);
   LED3_OFF;
   LED4_ON;
   Delay(speed);
   LED4_OFF;
   Delay(speed);
   break;
   }
   case 1:
   { LED1_ON;
     LED2_OFF;
     LED3_OFF;
     LED4_OFF;
     break;
   }
     case 2:
   { LED1_ON;
     LED2_ON;
     LED3_OFF;
     LED4_OFF;
     break;
   }
    case 3:
   { LED1_ON;
     LED2_ON;
     LED3_ON;
     LED4_OFF;
     break;
   }
     case 4:
   { LED1_ON;
     LED2_ON;
     LED3_ON;
     LED4_ON;
     break;
   }
     case 5:
   { LED1_OFF;
     LED2_ON;
     LED3_ON;
     LED4_ON;
     break;
   }
    case 6:
   { LED1_OFF;
     LED2_OFF;
     LED3_ON;
     LED4_ON;
     break;
   }
    case 7:
   { LED1_OFF;
     LED2_OFF;
     LED3_OFF;
     LED4_ON;
     break;
   }

    }
  }
}
EXTI函数代码
/*******************************************************************************
* Function Name  : EXTI15_10_IRQHandler
* Description    : This function handles External lines 15 to 10 interrupt request.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void EXTI15_10_IRQHandler(void)
{
  if(EXTI_GetITStatus(EXTI_Line13) != RESET)
  { EXTI_ClearITPendingBit(EXTI_Line13);
  Count++;
   if(Count==8)Count=0;

 Delay(100); 
 }
}


工程师
2012-04-08 13:08:33     打赏
10楼
下图是按第3次按键时的画面:

共107条 1/11 1 2 3 4 5 6 ›| 跳转至

回复

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