ADC の main.c
TIM3の換わりに EOCでLEDを点滅させたいのです。
オプションバイト remapping(AFR) の選択で bit5 ADC0,1,2,3 と bit6 ADC5,6 が変化します。
これでADCを選択しなかったら ADC7,8,9 の3ch しか動作しないのでしょうか?
UARTを使うとその分遅くなるのでそれもキャンセルのつもりです。
//*****************
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "stm8s.h"
#include "usrlib-uart.h"
#define fMASTER 4000000 // 4MHz
/*
#define TIM3_FREQ 10 // 10Hz
#define TIM3_PRSC TIM3_PRESCALER_128
#define TIM3_ARR ((u16)(fMASTER/128/TIM3_FREQ)-1) // 4MHz/128/10-1=3124
*/
char UARTstrTX[100];
void main(void)
{
CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSI, DISABLE, CLK_CURRENTCLOCKSTATE_DISABLE);
CLK_HSIPrescalerConfig( CLK_PRESCALER_HSIDIV4 ); // ADC=16/4=4MHz
CLK_SYSCLKConfig( CLK_PRESCALER_CPUDIV1 ); // CPU=4MHz
/*
TIM3_DeInit();
TIM3_TimeBaseInit(TIM3_PRSC,TIM3_ARR); // 0.1sec timer
TIM3_ITConfig(TIM3_IT_UPDATE, ENABLE);
TIM3_Cmd(ENABLE);
*/
ADC1_DeInit();
ADC1_Init(ADC1_CONVERSIONMODE_CONTINUOUS, ADC1_CHANNEL_2, ADC1_PRESSEL_FCPU_D2, ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_ALL, DISABLE);
ADC1_ScanModeCmd(ENABLE);
ADC1_DataBufferCmd(ENABLE);
/*
UART2_DeInit();
UART2_Init((u32)115200, UART2_WORDLENGTH_9D, UART2_STOPBITS_1, UART2_PARITY_ODD, UART2_SYNCMODE_CLOCK_DISABLE, UART2_MODE_TXRX_ENABLE);
UART2_ITConfig(UART2_IT_RXNE_OR, ENABLE);
UART2_Cmd(ENABLE);
*/
GPIO_Init(GPIOD, GPIO_PIN_0, GPIO_MODE_OUT_PP_HIGH_FAST); // LED
enableInterrupts();
while(1){ } /*Main loop*/
}
u16 adc[10]; // ADC0-9 values
float mV[10]; // calculated voltage
void Tim3Update(void) interrupt 15 // 0.1Sec interrupt
{
int i;
GPIO_WriteReverse(GPIOD,GPIO_PIN_0); // LED flash
// ADC sampling
ADC1_StartConversion();
// get ADC values
for(i=0;i<=9;i++) adc[i]=ADC1_GetBufferValue(i);
// convert to voltage
for(i=0;i<=9;i++) mV[i]=(float)adc[i]/1024.0*3300.0;
// display ADC value
/*
sprintf(UARTstrTX,"ADC(0-9)=");
SerialPutString(UARTstrTX);
for(i=0;i<=9;i++)
{
sprintf(UARTstrTX,"%4d ",adc[i]);
SerialPutString(UARTstrTX);
}
SerialPutString("\r\n");
// display voltage value
sprintf(UARTstrTX,"mV(0-9) =");
SerialPutString(UARTstrTX);
for(i=0;i<=9;i++)
{
sprintf(UARTstrTX,"%4d ",(int)mV[i]);
SerialPutString(UARTstrTX);
}
SerialPutString("\r\n");
TIM3_ClearFlag(TIM3_FLAG_UPDATE);
*/
return;
}
#ifdef USE_FULL_ASSERT
void assert_failed(uint8_t* file, uint32_t line)
{
while (1) { }
}
#endif
コメント 0