ADC.C檔案
#include "Adc.h"
__IO uint16_t ADC_ConvertedValue;
void ADC_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructre;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE );
GPIO_InitStructre.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructre.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA,&GPIO_InitStructre);
}
void ADC_MODE_Config(void)
{
ADC_InitTypeDef ADC_InitStructre;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE );
ADC_InitStructre.ADC_Mode = ADC_Mode_Independent;
ADC_InitStructre.ADC_ScanConvMode = DISABLE;
ADC_InitStructre.ADC_ContinuousConvMode = ENABLE;
ADC_InitStructre.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
ADC_InitStructre.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructre.ADC_NbrOfChannel = 1;
ADC_Init(ADC1,&ADC_InitStructre);
//Main:96MHz = 12Mhz(ADC-TIME) //Main:72MHz = 9MHz(ADC-TIME)
RCC_ADCCLKConfig(RCC_PCLK2_Div8);
ADC_RegularChannelConfig(ADC1,ADC_Channel_1,1,ADC_SampleTime_55Cycles5);
ADC_ITConfig(ADC1,ADC_IT_EOC,ENABLE);
ADC_Cmd(ADC1,ENABLE);
ADC_StartCalibration(ADC1);
while(ADC_GetCalibrationStatus(ADC1));
ADC_SoftwareStartConvCmd(ADC1,ENABLE);
}
void ADC_NVIC_Config(void)
{
NVIC_InitTypeDef NVIC_InitStructre;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStructre.NVIC_IRQChannel = ADC1_2_IRQn;
NVIC_InitStructre.NVIC_IRQChannelCmd = ENABLE;
NVIC_InitStructre.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructre.NVIC_IRQChannelSubPriority =1;
NVIC_Init(&NVIC_InitStructre);
}
void ADC_IRQHandler(void)
{
if(ADC_GetITStatus(ADC1,ADC_IT_EOC)==SET)
{
ADC_ConvertedValue=https://bbs.csdn.net/topics/ADC_GetConversionValue(ADC1);
}
ADC_ClearITPendingBit(ADC1,ADC_IT_EOC);
}
ADC.H檔案
#ifndef ADC_H
#define ADC_H
#include "stm32f10x.h"
void ADC_GPIO_Config(void);
void ADC_MODE_Config(void);
void ADC_NVIC_Config(void);
void ADC_IRQHandler(void);
#endif
USART.C檔案
#include "Usart.h"
#include "stdio.h"
void Usart_Config()
{
GPIO_InitTypeDef GPIO_InitStructre;
USART_InitTypeDef USART_InitStructre;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE);
GPIO_InitStructre.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructre.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructre.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructre);
GPIO_InitStructre.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructre.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA,&GPIO_InitStructre);
USART_InitStructre.USART_BaudRate = 9600;
USART_InitStructre.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructre.USART_Mode = USART_Mode_Tx|USART_Mode_Rx;
USART_InitStructre.USART_Parity = USART_Parity_No;
USART_InitStructre.USART_StopBits = USART_StopBits_1;
USART_InitStructre.USART_WordLength = USART_WordLength_8b;
USART_Init(USART1,&USART_InitStructre);
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
USART_Cmd(USART1,ENABLE);
}
void USART_NVIC_Config()
{
NVIC_InitTypeDef NVIC_InitStructre;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_InitStructre.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructre.NVIC_IRQChannelCmd = ENABLE;
NVIC_InitStructre.NVIC_IRQChannelPreemptionPriority = 2;
NVIC_InitStructre.NVIC_IRQChannelSubPriority =2;
NVIC_Init(&NVIC_InitStructre);
}
void USART_SendBye(u16 BYE)
{
USART_SendData(USART1,BYE);
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
}
void USART_SendString(char * word)
{
u8 i=0;
while(1)
{
if(word[i]!=0)
{
USART_SendData(USART1,word[i]);
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
i++;
}
else return;
}
}
void USART_IRQHandler()
{
uint8_t RES;
if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)
{
RES=USART_ReceiveData(USART1);
USART_SendData(USART1,RES);
}
if(USART_GetFlagStatus(USART1,USART_IT_RXNE)!=RESET)
{
USART_ClearITPendingBit(USART1,USART_IT_RXNE);
}
}
int fputc(int ch,FILE*F)
{
USART_SendData(USART1,(unsigned char)ch);
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
return ch;
}
int fgetc(FILE*F)
{
while(USART_GetFlagStatus(USART1,USART_FLAG_RXNE)==RESET);
return (int)USART_ReceiveData(USART1);
}
USART.H檔案
#ifndef USART_H
#define USART_H
#include "stm32f10x.h"
#include "stdio.h"
void Usart_Config(void);
void USART_NVIC_Config(void);
void USART_SendBye(u16 BYE);
void USART_SendString(char * word);
void USART_IRQHandler(void);
int fputc(int ch,FILE*F);
int fgetc(FILE*F);
#endif
MAIN.C檔案
#include "stm32f10x.h"
#include "Usart.h"
#include "Adc.h"
void DELAY_US(uint32_t nTime);
void DELAY_MS(uint32_t nTime);
extern __IO uint16_t ADC_ConvertedValue;
float ACD_ConvertedValueLocal;
int main()
{
ADC_GPIO_Config();
ADC_MODE_Config();
ADC_NVIC_Config();
Usart_Config();
USART_NVIC_Config();
while(1)
{
ACD_ConvertedValueLocal=(float)ADC_ConvertedValue/4096*3.3;
printf("\r\n The current AD value = 0x%04X\r\n",ADC_ConvertedValue);
printf("\r\n The current AD value = %f V\r\n",ACD_ConvertedValueLocal);
printf("\r\n\r\n");
DELAY_MS(1000);
}
}
uj5u.com熱心網友回復:

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/268661.html
標籤:單片機/工控
上一篇:單片機藍牙模塊接收不到指令
