原创 STM32的AD和LCD试验_连载2

2008-7-28 08:13 3205 1 1 分类: MCU/ 嵌入式
一。试验目的:
    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 *);
      提示找不到函数,加上代码之后正常。
     工程文件点击下载


PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
1
关闭 站长推荐上一条 /3 下一条