一。试验目的:
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条评论)
登录后参与讨论