TripleKill писал(а):stemplar, а Вы уверены, что кроме SWD ничего больше не отгорело?
Как я понял, Вы сетевое напряжение просто через делитель подаёте на вход АЦП. Я прав?
Если прав, то имейте в виду: сетевое напряжение двуполярное, а АЦП у камня работает только от 0 до 3,3 В.
Сетевое же при общей земле уйдёт ниже 0, что не есть хорошо.
Если выпрямляете, то дело другое, но я б перепроверил)
Ну и это самое - схему-то покажете может с кодом?)
Уверен. Я и swd полез проверять только из-за отказа в прошивке. Где накосячил - так и не выяснил, но факт PA13 (SWDIO) нога на земле.
Сетевое конечно через диод, а потом делитель. Со схемой сложно, её нет, она в голове. Набросать в осязаемый вид надо время, которое будет через пару дней, по приезду из командировки, ну или в обед может по старинке на бумажке нацарапаю,отсканю...
Программа тоже дома..навскидку по памяти, без дефайнов и функции задержки примерно так:
Код: Выделить всё
int main(void)
{
GPIO_InitTypeDef PORT;
RCC_APB2PeriphClockCmd((RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOA) , ENABLE);
PORT.GPIO_Pin = (GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9);
PORT.GPIO_Mode = GPIO_Mode_Out_PP;
PORT.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init( GPIOC , &PORT);
RCC_APB2PeriphClockCmd(RCC_APB2ENR_ADC1EN, ENABLE);
ADC1->CR2 |= ADC_CR2_CAL;
while (!(ADC1->CR2 & ADC_CR2_CAL));
ADC1->SMPR2 |= (ADC_SMPR2_SMP1_2 | ADC_SMPR2_SMP1_1 | ADC_SMPR2_SMP1_0);
ADC1->CR2 |= ADC_CR2_JEXTSEL;
ADC1->CR2 |= ADC_CR2_JEXTTRIG;
ADC1->CR2 |= ADC_CR2_CONT;
ADC1->CR1 |= ADC_CR1_JAUTO;
ADC1->JSQR |= (1<<15);
ADC1->CR2 |= ADC_CR2_ADON;
ADC1->CR2 |= ADC_CR2_JSWSTART;
while (!(ADC1->SR & ADC_SR_JEOC));
int volt,smb,adc_res;
unsigned char digit[] =
{
0x01000101, //0
0x01000101, //1
0x01000101, //2
0x01000101, //3
0x01000101, //4
0x01000101, //5
0x01000101, //6
0x01000101, //7
0x01000101, //8
0x01000101 //9
};
while(1)
{
adc_res=ADC1->JDR1;
volt=260*adc_res/4095; //Коэфф. перерасчета под максимальное измеряемое напряжение
smb=(volt-volt/10*10); //единицы
GPIO_Write(GPIOC,digit[smb]);
GPIO_SetBits(GPIOC,GPIO_Pin_7);
delay();
GPIO_ResetBits(GPIOC,GPIO_Pin_7);
delay();
smb=(volt/10-volt/100*100);//десятки
GPIO_Write(GPIOC,digit[smb]);
GPIO_SetBits(GPIOC,GPIO_Pin_8);
delay();
GPIO_ResetBits(GPIOC,GPIO_Pin_8);
delay();
smb=volt/100;
GPIO_Write(GPIOC,digit[smb]);//сотни
GPIO_SetBits(GPIOC,GPIO_Pin_9);
delay();
GPIO_ResetBits(GPIOC,GPIO_Pin_9);
delay();
}
}
Массив digit - знакогенератор, тут просто накидал одинаковые числа, в оригинале естественно все согласно выводимых чисел. Ноги 7,8,9 - катоды.Вроде в коде ничего не пропустил

Ах да..по питанию еще дроссель 150мкГн стоит. Блокировочные по всем ногам питания.