- 打卡等级:初来乍到
- 打卡总天数:4
- 最近打卡:2025-04-06 09:27:31
已绑定手机
注册会员
- 积分
- 53
|
发表于 2025-4-5 09:21:24
|
显示全部楼层
官方例程测试的,把CKCON = 1; 时数据就正常了,=0时数据都是对的就是根本数据位置错位
#include "..\..\comm\STC32G.h"
#include "intrins.h"
#include "stdio.h"
typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long u32;
/************* ±¾µØ³£Á¿ÉùÃ÷ **************/
#define MAIN_Fosc 22118400L //¶¨ÒåÖ÷ʱÖÓ
#define Baudrate 115200L
#define TM (65536 -(MAIN_Fosc/Baudrate/4))
#define ADC_SPEED 15 /* 0~15, ADCת»»Ê±¼ä(CPUʱÖÓÊý) = (n+1)*32 ADCCFG */
#define RES_FMT (1<<5) /* ADC½á¹û¸ñʽ 0: ×ó¶ÔÆë, ADC_RES: D11 D10 D9 D8 D7 D6 D5 D4, ADC_RESL: D3 D2 D1 D0 0 0 0 0 */
/* ADCCFG 1: ÓÒ¶ÔÆë, ADC_RES: 0 0 0 0 D11 D10 D9 D8, ADC_RESL: D7 D6 D5 D4 D3 D2 D1 D0 */
#define ADC_CH 16 /* 1~16, ADCת»»Í¨µÀÊý, Ðèͬ²½ÐÞ¸Ä DMA_ADC_CHSW ת»»Í¨µÀ */
#define ADC_DATA 12 /* 6~n, ÿ¸öͨµÀADCת»»Êý¾Ý×ÜÊý, 2*ת»»´ÎÊý+4, Ðèͬ²½ÐÞ¸Ä DMA_ADC_CFG2 ת»»´ÎÊý */
#define DMA_ADDR 0x000 /* DMAÊý¾Ý´æ·ÅµØÖ· */
/************* ±¾µØ±äÁ¿ÉùÃ÷ **************/
bit DmaFlag;
u8 xdata DmaBuffer[ADC_CH][ADC_DATA] _at_ DMA_ADDR;//
u8 temp[20];
/************* ±¾µØº¯ÊýÉùÃ÷ **************/
void delay_ms(u8 ms);
void DMA_Config(void);
/******************** ´®¿Ú´òÓ¡º¯Êý ********************/
void UartInit(void)
{
S2_S = 1; //UART2 switch to: 0: P1.0 P1.1, 1: P4.6 P4.7
S2CFG |= 0x01; //ʹÓô®¿Ú2ʱ£¬W1λ±ØÐèÉèÖÃΪ1£¬·ñÔò¿ÉÄÜ»á²úÉú²»¿ÉÔ¤ÆÚµÄ´íÎó
S2CON = (S2CON & 0x3f) | 0x40;
T2L = TM;
T2H = TM>>8;
AUXR |= 0x14; //¶¨Ê±Æ÷2ʱÖÓ1Tģʽ,¿ªÊ¼¼ÆÊ±
}
void UartPutc(unsigned char dat)
{
S2BUF = dat;
while(S2TI == 0);
S2TI = 0; //Clear Tx flag
}
char putchar(char c)
{
UartPutc(c);
return c;
}
/**********************************************/
void main(void)
{
u8 i,n;
WTST = 0; //ÉèÖóÌÐòÖ¸ÁîÑÓʱ²ÎÊý£¬¸³ÖµÎª0¿É½«CPUÖ´ÐÐÖ¸ÁîµÄËÙ¶ÈÉèÖÃΪ×î¿ì
EAXFR = 1; //À©Õ¹¼Ä´æÆ÷(XFR)·ÃÎÊʹÄÜ
CKCON = 0; //Ìá¸ß·ÃÎÊXRAMËÙ¶È
P0M1 = 0x7f; P0M0 = 0x00; //ÉèÖÃÒª×öADCµÄIO×ö¸ß×èÊäÈë
P1M1 = 0xfb; P1M0 = 0x00; //ÉèÖÃÒª×öADCµÄIO×ö¸ß×èÊäÈë
P2M1 = 0x3c; P2M0 = 0x3c; //ÉèÖÃP2.2~P2.5Ϊ©¼«¿ªÂ·(ʵÑéÏä¼ÓÁËÉÏÀµç×èµ½3.3V)
P3M1 = 0x50; P3M0 = 0x50; //ÉèÖÃP3.4¡¢P3.6Ϊ©¼«¿ªÂ·(ʵÑéÏä¼ÓÁËÉÏÀµç×èµ½3.3V)
P4M1 = 0x3c; P4M0 = 0x3c; //ÉèÖÃP4.2~P4.5Ϊ©¼«¿ªÂ·(ʵÑéÏä¼ÓÁËÉÏÀµç×èµ½3.3V)
P5M1 = 0x1c; P5M0 = 0x0c; //ÉèÖÃP5.2¡¢P5.3Ϊ©¼«¿ªÂ·(ʵÑéÏä¼ÓÁËÉÏÀµç×èµ½3.3V)£¬ÉèÖÃP5.4Ϊ¸ß×èÊäÈë
P6M1 = 0xff; P6M0 = 0xff; //ÉèÖÃΪ©¼«¿ªÂ·(ʵÑéÏä¼ÓÁËÉÏÀµç×èµ½3.3V)
P7M1 = 0x00; P7M0 = 0x00; //ÉèÖÃΪ׼˫Ïò¿Ú
ADCTIM = 0x3f; //ÉèÖÃͨµÀÑ¡Ôñʱ¼ä¡¢±£³Öʱ¼ä¡¢²ÉÑùʱ¼ä
ADCCFG = RES_FMT + ADC_SPEED;
//ADCÄ£¿éµçÔ´´ò¿ªºó£¬ÐèµÈ´ý1ms£¬MCUÄÚ²¿ADCµçÔ´Îȶ¨ºóÔÙ½øÐÐADת»»
ADC_CONTR = 0x80 + 0; //ADC on + channel
//UartInit();
DMA_Config();
EA = 1;
//printf("STC32GϵÁÐADC DMA²âÊÔ³ÌÐò!\r\n");
while (1)
{
delay_ms(200);
if(DmaFlag)
{
DmaFlag = 0;
// for(i=0; i<ADC_CH; i++)
// {
// for(n=0; n<ADC_DATA; n++)
// {
// printf("0x%02x ",DmaBuffer[n]);
// }
// printf("\r\n");
// }
// printf("\r\n");
DMA_ADC_CR = 0xc0; //bit7 1:Enable ADC_DMA, bit6 1:Start ADC_DMA
}
}
}
//========================================================================
// º¯Êý: void DMA_Config(void)
// ÃèÊö: ADC DMA ¹¦ÄÜÅäÖÃ.
// ²ÎÊý: none.
// ·µ»Ø: none.
// °æ±¾: V1.0, 2021-5-6
//========================================================================
void DMA_Config(void)
{
DMA_ADC_STA = 0x00;
DMA_ADC_CFG = 0x80; //bit7 1:Enable Interrupt
DMA_ADC_RXAH = (u8)(DMA_ADDR >> 8); //ADCת»»Êý¾Ý´æ´¢µØÖ·
DMA_ADC_RXAL = (u8)DMA_ADDR;
DMA_ADC_CFG2 = 0x09; //ÿ¸öͨµÀADCת»»´ÎÊý:4
DMA_ADC_CHSW0 = 0xff; //ADCͨµÀʹÄܼĴæÆ÷ ADC7~ADC0
DMA_ADC_CHSW1 = 0xff; //ADCͨµÀʹÄܼĴæÆ÷ ADC15~ADC8
DMA_ADC_CR = 0xc0; //bit7 1:Enable ADC_DMA, bit6 1:Start ADC_DMA
}
//========================================================================
// º¯Êý: void delay_ms(u8 ms)
// ÃèÊö: ÑÓʱº¯Êý¡£
// ²ÎÊý: ms,ÒªÑÓʱµÄmsÊý, ÕâÀïÖ»Ö§³Ö1~255ms. ×Ô¶¯ÊÊÓ¦Ö÷ʱÖÓ.
// ·µ»Ø: none.
// °æ±¾: VER1.0
// ÈÕÆÚ: 2013-4-1
// ±¸×¢:
//========================================================================
void delay_ms(u8 ms)
{
u16 i;
do
{
i = MAIN_Fosc / 6000;
while(--i);
}while(--ms);
}
//========================================================================
// º¯Êý: void ADC_DMA_Interrupt (void) interrupt 48
// ÃèÊö: ADC DMAÖжϺ¯Êý
// ²ÎÊý: none.
// ·µ»Ø: none.
// °æ±¾: VER1.0
// ÈÕÆÚ: 2021-5-8
// ±¸×¢:
//========================================================================
void ADC_DMA_Interrupt(void) interrupt 13
{
DMA_ADC_STA = 0;
DmaFlag = 1;
}
|
|