EDN首页   博客首页

最新日志

发表于:2008-7-28 8:13:40
标签:无标签

1

STM32的AD和LCD试验_连载2

一。试验目的:
    1.熟悉使用STM32的AD转换器
    2.学习段吗LCD驱动方式
二。代码
    代码是从BLINKY文件夹拷贝过来的,作了一些改动。
 #include <stm32f10x_lib.h>
 #include "STM32_Init.h"
 #define LED1 (1<<4)
 #define LED2 (1<<5)
 #define LED3 (1<<6)
 #define LED4 (1<<7)
 #define LED (LED1|LED2|LED3|LED4)
 #define KEY2 (1<<3)
 #define KEY3 (1<<4)

extern void lcdClr  (void);
extern void lcdWrPos(char*, int);
extern void lcdWrStr(char *);

 unsigned short ADC_Value;
 /*******初始化AD和DMA************/
 void adc_init(void)
 {
 /************使能外设时钟ADC1***************/
     RCC->APB2ENR |= (1<<9);                        

 /**************配置AD寄存器*****************/
     ADC1->SQR1 &= ~0x00F00000;                      // 规则序列只进行一次转换
     ADC1->SQR3  &= 0x0000001F;                      // clear bits 0..4
     ADC1->SQR3  |= 0x0000000A;                      // 序列1.转换通道 10

     ADC1->SMPR1 &= ~0x00000007;                     // 清0位0..2 (通道10)
     ADC1->SMPR1 |= 0x00000005;                      // 设置采样时间 (55,5 cycles)
     
     ADC1->CR1   =  0x00000100;                      // 扫描模式,如果CR2的bit1(CONT)为1,则循环扫描规则序列
     ADC1->CR2   =  0x000E0103;                      // 转换数据右对齐,连续转换(设置了CONT位)
                                                  // EXTSEL = SWSTART表示启动转换的外部事件是设置SWSTART
                                                  // enable ADC, DMA mode, no external Trigger
     ADC1->CR2  |=  0x00500000;                      // start SW conversion

  /**************配置DMA*********************/
     RCC->AHBENR |= (1<<0);                          // 使能外设时钟 DMA

     DMA_Channel1->CMAR  = (u32)&ADC_Value; // set channel1 memory address
     DMA_Channel1->CPAR  = (u32)&(ADC1->DR);         // set channel1 peripheral address
     DMA_Channel1->CNDTR = 1;                          //传送1个字
     DMA_Channel1->CCR   = 0x00002520;               // configure DMA channel
     DMA_Channel1->CCR  |= (1 << 0);                 // DMA 通道 1 开启

 }

 int main()
 {
     unsigned int i, j,k;
     char sAd_value[10];  //保存AD结果的字符数组,数组名可以作为字符串传递给lcdWrStr()
     unsigned short key;
     stm32_Init();
     adc_init();
     while(1)
     {
         for(i=ADC_Value;i>0;i--)
         {
             for(j=1000;j>0;j--)  
              ;
         }
         GPIOC->ODR &=0xFFFFFF0F;
         GPIOC->ODR |=LED1;
         for(i=ADC_Value;i>0;i--)
         {
             for(j=1000;j>0;j--)  
              ;
         }
         GPIOC->ODR &=0xFFFFFF0F;
         GPIOC->ODR |=LED2;
         for(i=ADC_Value;i>0;i--)
         {
             for(j=1000;j>0;j--)  
              ;
         }
         GPIOC->ODR &=0xFFFFFF0F;
         GPIOC->ODR |=LED3;
         for(i=ADC_Value;i>0;i--)
         {
             for(j=1000;j>0;j--)  
              ;
         }
         GPIOC->ODR &=0xFFFFFF0F;
         GPIOC->ODR |=LED4;

         key = GPIOD->IDR;
         sprintf(sAd_value, "%4X", ADC_Value);
         if ((key&KEY2)==0)
            lcdWrStr("KISS");
         else if((key&KEY3)    ==0)
            lcdWrStr("LOVE");
         else
            lcdWrStr(sAd_value);
     }
}

问题:开始没有加     extern void lcdClr  (void);
                    extern void lcdWrPos(char*, int);
                    extern void lcdWrStr(char *);
      提示找不到函数,加上代码之后正常。
     工程文件点击下载

点击此处查看原文 >>

系统分类: 单片机   |    用户分类:    |    来源: 原创

评论(0) | 阅读(380)
发表于:2008-7-21 11:29:33
标签:单片机  GPIO  

1

STM32的GPIO管脚试验_连载1

#include <stm32f10x_lib.h>
#include "STM32_Init.h"
#define LED1 (1<<4)
#define LED2 (1<<5)
#define LED3 (1<<6)
#define LED4 (1<<7)
#define LED (LED1 |LED2 |LED3 |LED4)
#define KEY2 (1<<3)
#define KEY3 (1<<4)
int main(void)
{
  int i,j;
  unsigned short kk;
  stm32_Init();
  //GPIOC->ODR = LED1;
  while(1)
  {
    for(i=0;i<1000;i++)
        for(j=0;j<1000;j++)
        GPIOC->ODR |= LED1;
    for(i=0;i<1000;i++)
        for(j=0;j<1000;j++)
        GPIOC->ODR |= LED2;
    for(i=0;i<1000;i++)
        for(j=0;j<1000;j++)
        GPIOC->ODR |= LED3;
    for(i=0;i<1000;i++)
        for(j=0;j<1000;j++)
        GPIOC->ODR |= LED4;
    for(i=0;i<1000;i++)
        for(j=0;j<1000;j++)
        GPIOC->ODR &= ~(LED);
       
    kk=GPIOD->IDR;
    while((kk&KEY2)==0)
    {
        GPIOC->ODR |= LED1|LED3;
        for(i=0;i<1000;i++)
          for(j=0;j<1000;j++);
        GPIOC->ODR &= ~(LED);
        kk=GPIOD->IDR;
        for(i=0;i<1000;i++)
          for(j=0;j<1000;j++)
            ;
    }
    while((kk&KEY3)==0)
    {
        GPIOC->ODR |= LED2|LED4;
        for(i=0;i<1000;i++)
          for(j=0;j<1000;j++);   
          GPIOC->ODR &= ~(LED);
          kk=GPIOD->IDR;
        for(i=0;i<1000;i++)
          for(j=0;j<1000;j++)
            ;
    }
   
  }
}

目标:学习gpio使用,控制4个led完成跑马灯,在key2按下时,led1  led3闪烁,在按下key3是led2  led4闪烁。
问题:1〉开始只将STM32_Init.c从keil的模板工程里靠了过来,忽略了STM32_Init.h,所以编译没有通过。
      2〉STM32_Reg.h不是系统自带的,需要从样板工程拷贝过来。
     工程文件点击下载

点击此处查看原文 >>

系统分类: 单片机   |    用户分类:    |    来源: 原创

评论(0) | 阅读(158)
发表于:2008-7-9 14:18:46
标签:ARM  

2

Cortex-M3权威指南

说明:这本书是Bluelucky发表在www.ourdev.com上的,我转在这里共更多的人学习参考。希望大家除了学习本书的知识外,也能学习译者大公无私的精神。下面是译者的一段话:
    我今年5月在这里看到一个贴子,里面附上了一本讲Cortex-M3的英文书 《The Definitive Guide to the ARM Cortex-M3》,看过后感觉很有味道,就回贴说想翻译它。为了实现自己的愿 望,我后来闷着花一个月的时间把它翻译出来了。翻译出后没敢马上发表,先给几位朋友试读了。在他们比较认可,并且改正了他们帮我找出的错误后,今天决定在 这里发表。不仅是因为这是我获取原稿的地方,更因为我在这里收获的,both精神食粮和直接帮助商业项目的东西都太多了,能发在这里很兴奋!
我翻译的文风与大多数科技类书籍都很不同,比较活泼和口语化,希望大家喜欢!具体说明和其它导读的内容我写在译序里。

点击此处查看原文 >>

系统分类: ARM   |    用户分类:    |    来源: 转贴

评论(1) | 阅读(433)
发表于:2008-7-9 8:54:35
标签:无标签

1

套件学习笔记

    最近开始学习ARM,买了STM32开发板,决定每天学一点,每天进步一点,每天在这里把自己的收获写出来作为以后的笔记资料。昨天晚上装上了MDK3.22,把软件自带的第一个例子下载到开发板,跑马灯和液晶还有AD转换器都运行正常。虽然不是我自己的程序,但是仍然很兴奋,起码知道如何下载程序了。icon害怕自己偷懒,所以把日志晒出来让大家监督了。

点击此处查看原文 >>

系统分类: 单片机   |    用户分类:    |    来源: 无分类

评论(1) | 阅读(182)
发表于:2008-7-3 8:47:57
标签:无标签

1

通过审核,可以购买学习套件了!

    今天我上来看看了通过的方案列表,发现windwent在上面,高兴极了,我可以学习STM32了,可以用ARM开发产品了,兴奋ing!

点击此处查看原文 >>

系统分类: 生活点滴   |    用户分类:    |    来源: 原创

评论(0) | 阅读(138)
发表于:2008-7-2 8:45:51
标签:USB  工控  CAN总线  

2

基于STM32的燃气报警控制器

STM32项目/学习计划表

项目名称 基于STM32的燃气报警控制器
请点击以下链接更新您的个人资料(包括“职位,部门,单位名称,地址,邮编,电子邮箱,电话”),以便我们能及时联系您并快速发送开发套件。http://space.ednchina.com/member/Register.aspx
联系方式
(邮箱/电话)
为了保证用户隐私,此处已被隐藏
预计实施时间自 7月15日 到12月30日计划参加人数 1
背景描述该计划的背景及其实现的目的、意义
    天然气、液化气、人工煤气等可燃气体在工业和家庭中使用越来越广泛,安全的需要决定了对燃气的监控装置要求越来越高。为便于对分布在不同地点的燃气探测器进行集中监控,设计开发一种基于CAN总线的燃气报警控制器。

功能描述详细描述该项目能够实现的功能
    使用stm32f103rb作主控芯片,控制器采用can接口接收来自can总线燃气探测器的气体浓度信号,采用8路ad转换器扩展8路4-20mA采集通道,用来接收分线制燃气探测器的气体浓度信号;使用4路继电器作控制输出;使用320*240LCD做显示界面,配合7279扩展的键盘实现人机交互;通过USB接口与上位机通讯,上位机软件采用VB.NET编写。

解决办法预计会遇到的困难和相应的解决办法
1.简单问题参考资料通过自己努力解决
2.比较复杂的问题来小组讨论解决
预期效果开发项目:预期要解决的问题、达到的经济效益和产品所需数量;
学习项目:希望学到的知识或技能,达到哪些实践的目的等。
    开发先进的燃气控制器,比现有设备提高巡检速度和主机运行速度提高控制器的抗干扰能力。减少人机操作的响应时间,提高人机界面友好程度。比现有设备提高集成度,方便生产调试,提高生产效率。取代现有CAN总线控制器,比现有燃气报警控制器节省10%成本(扩展外部设备的成本和生产调试成本)。需要1套学习套件。

时间安排日  期进    度    描    述
 7.15-8.15 系统学习STM32的使用
 8.16-8.31 硬件设计,绘制原理图、线路板
 9.1-12.30 软件设计,调试、更改不合理的软硬件设计
总结 
备  注

签名:邵开春           时间:2008年7月2日   

点击此处查看原文 >>

系统分类: 单片机   |    用户分类: 无分类    |    来源: 无分类

评论(3) | 阅读(197)
总共 , 当前 /