原创 基于STM32的 串口控制台 + 遥控解码 (重新整理)

2008-7-30 22:43 7283 7 10 分类: MCU/ 嵌入式



原来发表于21ic论坛,近期在整理自己的东西,一并搬过来,呵呵,   


这个串口控制台主要有三个点:


1) 串口的发送与接收;


2) Timer的分频设置与取值;


3) 外部下降沿中断的捕获与响应;//理解外部中断的响应机理,及应用方法,以便于以后项目设计时资源的考虑


4) GPIO的控制;----小灯闪烁



交个作业: 串口控制台 + 遥控解码


mood25.gif walnutcy 发表于 4/22/2008 6:18:52 PM ST MCU


昨天上午拿到的st-link-ii和一块最小系统;

呵呵,东西到了,不好好看看心里过意不去,就着手做了一个简单的控制台(串口),顺便做了一下遥控解码,测试TIMx,

以前一直在看103的资料,最小系统上的却是101,我也懒得去换了,就用它了.
接线如下:
UART2----PIN12(TX),PIN13(RX)--->对接到PL2303的TX,RX上去,便于笔记本调试嘛,

IR信号---PIN21
(图方便装,直接把遥控头的PIN2(GND)-->PIN23,PIN3(VS)-->PIN24,PIN1(信号)-->PIN21,因为是DEMO嘛,不用加电容了,呵呵,)


因为是48PIN封装,有些地方不能直接用LIB库中的源码,
下面是要注意的地方,使用UART2的PIN脚,不需重映射
用例程里的代码时注意去掉这句话:
//GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE);


至于串口调通就不说了,以前好多兄弟都写过了,
下面主要说下遥控解码对时钟的基本设置:
配置TIM2的时钟为1MHz,这个每个cnt即为1us,便于计算时钟值,
    /* PCLK1 = HCLK/4 */
    RCC_PCLK1Config(RCC_HCLK_Div4);能

    /* TIM2 clock enable */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,  ENABLE);

  /* Time base configuration */
  TIM_TimeBaseStructure.TIM_Period = 65535;  //时钟一直运行        
  TIM_TimeBaseStructure.TIM_Prescaler = 0;       
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;    
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  
  TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

/* ---------------------------------------------------------------
  TIM2 Configuration: Output Compare Timing Mode:
  TIM2CLK = 36 MHz, Prescaler = 36, TIM2 counter clock = 1 MHz
---------------------------------------------------------------*/
  /* Prescaler configuration */
  TIM_PrescalerConfig(TIM2, 36, TIM_PSCReloadMode_Immediate);
  
  /* TIM2 enable counter */
  TIM_Cmd(TIM2, ENABLE);


配置PIN21下降沿中断
    /* Configure PB.10 as input floating (EXTI Line 10) */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOB, &GPIO_InitStructure);

    /* Enable the EXTI15_10 Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQChannel;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);

  GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource10);
  /* Configure EXTI Line10 to generate an interrupt on falling edge */  
  EXTI_InitStructure.EXTI_Line = EXTI_Line10;
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);
  /* Generate software interrupt: simulate a falling edge applied on EXTI line 9 */
  EXTI_GenerateSWInterrupt(EXTI_Line9);

在中断中处理如下:
  if(EXTI_GetITStatus(EXTI_Line10) != RESET)
  {
    IrDecode(TIM_GetCounter(TIM2));   
    /* Toggle PB8 pin */  //收到遥控器时其中的一个小灯闪烁,交替变换亮暗
    GPIO_WriteBit(GPIOB, GPIO_Pin_8, (BitAction)((1-GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_8))));
    /* Clear the EXTI line 9 pending bit */
    EXTI_ClearITPendingBit(EXTI_Line10);
  }
主循环任务也很简单,如下:
        UartConsoleMain(); // 检查有没有串口输入:
        // decode ir
        if (gIrMsgTx) // 看看有没有检测到IR按下:
        {   key = gIrMsgTx;
            gIrMsgTx = MSG_NONE;
            printf("IrCode: %02x-%02x-%02x-%02x\r\n",gIrBuf[0],gIrBuf[1],gIrBuf[2],gIrBuf[3]);
        }

//写得很乱,呵呵,


-----------------------------


慢慢整理,并把其中的部分东西讲一讲,呵呵,因为近期在做资源规划,打算把STM32用到产品中去,前期加班抽空做得测试也没有白费,稍感欣慰……
附图像:


点击看大图

文章评论3条评论)

登录后参与讨论

walnutcy_696810119 2009-11-16 08:20

遥控解码部分是最简单的, 这类代码太多,很容易找到!记的另一篇贴子中给出了遥控发送的代码,发送代码一般不好找。

用户1487022 2009-11-16 01:16

要写就把遥控解码的部分贴出来。。。

walnutcy_696810119 2008-7-30 23:03

这些都是两个月前的东西了,目前正在规划应用的是可以外扩总线应用的,关于带总线的应用,目前还没看到哪位兄弟有文章讲,
相关推荐阅读
walnutcy_696810119 2012-11-21 08:37
Linux下使用smartCOM调试串口
在Windows下的串口调试一直使用sscom,在Linux下只找到一个cutecom,用了几次,很不喜欢,就着手开发了一款自己的串口调试工具,smartCOM。 smartCOM介绍:http...
walnutcy_696810119 2012-03-29 18:12
【博客大赛】原创--测量基础:什么是测量
写在正文之前: 适逢EDNChina搞活动,而我本人也算在测量业工作,就一起作下笔记吧。若有错误,请大家一起斧正。笔者写本文一方面是梳理知识,另一方面也希望与大家探讨有关测量的知识、应用等,希...
walnutcy_696810119 2011-12-20 18:29
GLONASS 15年来,首次实现24颗星在轨可用
  EDN的博客改版后,不太好用,在SINA重开一个,不过重点改为关注GNSS行业新闻 http://blog.sina.com.cn/s/blog_7420cd1701012en9....
walnutcy_696810119 2011-12-20 17:49
逆向工程第一步:通信协议分析
工程中常有这样的事,想分析下其他知名公司产品中的通信协议,以便生产设计兼容产品。 1) 逆向工程,首先要了解产品,知己知彼,百战不怠;     去年受命想仿一款GARMIN的导航盒,但无法...
walnutcy_696810119 2011-11-14 11:30
通用代码调试方法 (Keil, VCC)
调试代码一般需要定位问题,这里给出一个解决方案, 一般的编译器均支持这些宏指令。   #define DEBUG_WALT_1113     1 extern void log_t...
我要评论
3
7
关闭 站长推荐上一条 /2 下一条