初级会员

- 积分
- 85
- 金钱
- 85
- 注册时间
- 2013-6-23
- 在线时间
- 11 小时
|

楼主 |
发表于 2013-7-2 14:00:19
|
显示全部楼层
回复【15楼】augustedward:
---------------------------------
#include"stm32f10x_lib.h"
/*#include"stm32f10x.h"
#include"stm32f10x_dma.h"
#include"stm32f10x_adc.h"
#include"stm32f10x_usart.h"
#include"stm32f10x_rcc.h"*/
#include"stdio.h"
#include"stdint.h"
#define ADC1_DR_Address ((uint32_t)0x4001244C)
#ifdef __GNUC__
#define  UTCHAR_PROTOYPE int __io_putchar(int ch)
#else
#define  UTCHAR_PROTOYPE int fputc(int ch,FILE *f)
#endif
uint16_t ADCConvertedValue;
uint16_t *p;
void RCC_config(void);
void GPIO_config(void);
void USART_config(void);
void DMA_config(void);
void ADC_config(void);
void  ut_String(uint16_t);
void Delay(uint32_t nCount);
int main(void)
{
RCC_config();
GPIO_config();
USART_config();
DMA_config();
ADC_config();
while(1)
{
Delay(0x8FFFF);
printf("ADC = %X Volt = %d mv\r\n", ADCConvertedValue, ADCConvertedValue*3300/4096);
}
}
void RCC_Config(void)
{
ErrorStatus HSEStartUpStatus; //定义外部高速晶体启动状态枚举变量
RCC_DeInit();
RCC_HSEConfig(RCC_HSE_ON);
HSEStartUpStatus=RCC_WaitForHSEStartUp();
if(HSEStartUpStatus==SUCCESS)
{
RCC_HCLKConfig(RCC_SYSCLK_Div1);//设置AHB时钟,时钟源来自系统时钟的1分频
RCC_HCLK2Config(RCC_HCLK_Div1); // //APB2为AHB时钟的1分频
RCC_HCLK1Config(RCC_HCLK_Div2); ////APB1为AHB时钟的2分频
RCC_ADCCLKConfig(RCC_PCLK2_Div4);
RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9); //配置PLL时钟 == 外部高速晶体时钟*9
RCC_ADCCLKConfig(RCC_PCLK2_Div4);
RCC_PLLCmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET) //等待PLL时钟就绪
{
}
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);////配置系统时钟 =  LL时钟
while(RCC_GetSYSCLKSource()!=0x08) ////检查PLL时钟是否作为系统时钟
{
}
}
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);//使能DMA时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1|RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
}
void GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;
GPIO_Init(GPIOB,&GPIO_InitStructure);
}
void DMA_Config(void)
{
DMA_InitTypeDef DMA_InitStructure;//定义DMA初始化结构体
DMA_DeInit(DMA1_Channel1);
DMA_InitStructure.DMA_PeripheralBaseAddr=ADC1_DR_Address;
DMA_InitStructure.DMA_MemoryBaseAddr=(uint32_t)&ADCConvertedValue;
DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC;
DMA_InitStructure.DMA_BufferSize=1;
DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable;
DMA_InitStructure.DMA_MemoryInc= DMA_MemoryInc_Disable;
DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_HalfWord;
DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_HalfWord;
DMA_InitStructure.DMA_Mode=DMA_Mode_Circular;
DMA_InitStructure.DMA_Priority=DMA_Priority_High;
DMA_InitStructure.DMA_M2M=DMA_M2M_Disable;
DMA_Init(DMA1_Channel1,&DMA_InitStructure);
DMA_Cmd(DMA1_Channel1,ENABLE);
}
void ADC_Config(void)
{
ADC_InitTypeDef ADC_InitStructure; //定义ADC的结构体变量
ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;//ADC1和ADC2的工作方式独立
ADC_InitStructure.ADC_ScanConvMode=ENABLE; //使能扫描
ADC_InitStructure.ADC_ContinuousConvMode=ENABLE;//ADC转换工作在连续模式
ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;//有软件控制转换
ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;//转换数据位右对齐
ADC_InitStructure.ADC_NbrOfChannel=1;//转换通道为通道1
ADC_Init(ADC1,&ADC_InitStructure); //初始化ADC
ADC_RegularChannelConfig(ADC1,ADC_Channel_9,1,ADC_SampleTime_28Cycles5);
ADC_DMACmd(ADC1,ENABLE);
ADC_Cmd(ADC1,ENABLE);
ADC_ResetCalibration(ADC1);//重置ADC1校准寄存器
while(ADC_GetResetCalibrationStatus(ADC1)); //等待ADC1校准重置完成
ADC_StartCalibration(ADC1);//开始ADC1校准
while(ADC_GetCalibrationStatus(ADC1));//等待ADC1校准完成 ADC_SoftwareStartConvCmd(ADC1, ENABLE); //使能ADC1软件开始转换
}
void USART_Config(void)
{
USART_InitTypeDef USART_InitStructure; //定义串口初始化结构体
USART_InitStructure.USART_BaudRate=115200;
USART_InitStructure.USART_WordLength=USART_WordLength_8b;
USART_InitStructure.USART_StopBits=USART_StopBits_1;
USART_InitStructure.USART_Parity=USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
USART_Init(USART1,&USART_InitStructure);
USART_Cmd(USART1,ENABLE);
}
/*void  ut_String(uint16_t *p);
{
while(*p)
{
USART_SendData(USART1,*P++);
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET)
{
}
}
} */
void Delay(uint32_t nCount)
{
for(;nCount!=0;nCount--);
}
PUTCHAR_PROTOYPE
{
USART_SendData(USART1, ch);
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET)
{
}
return ch;
} |
|