Спойлер


Код: Выделить всё
/******************************************************************************/
/* PLL (clocked by HSI) used as System clock source */
/******************************************************************************/
/* At this stage the HSI is already enabled and used as System clock source */
/* SYSCLK, HCLK, PCLK configuration ----------------------------------------*/
/* Enable Prefetch Buffer and set Flash Latency */
FLASH->ACR = FLASH_ACR_PRFTBE | FLASH_ACR_LATENCY;
/* HCLK = SYSCLK / 1 */
RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;
/* PCLK = HCLK / 1 */
RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE_DIV1;
/* PLL configuration */
RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL));
RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSI_Div2 | RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLMULL2);
/* Enable PLL */
RCC->CR |= RCC_CR_PLLON;
/* Wait till PLL is ready */
while((RCC->CR & RCC_CR_PLLRDY) == 0)
{
}
/* Select PLL as system clock source */
RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;
/* Wait till PLL is used as system clock source */
while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)RCC_CFGR_SWS_PLL)
{
}Лучше всего сверлом 0.6мм или 0.7мм сверлить. Как раз по размеру вывода такие отверстия, потом паяется очень хорошо.TODD писал(а):сверление идет после травления, причем 1мм-ым сверлом.. хотя я недавно взял 0,8мм, ими еще не сверлил - станка нет сверлильного, а желательно, да не из чего..(как всегда)..
Под 1206 народ и по две дорожки 0.25мм проводит. А вот под 0805 и 0603 помещается только одна дорожка, так что в этом смысле они равнозначны. Ну и когда будете заказывать конденсаторы - не покупайте с диэлектриком Y5V, покупайте X7R или C0G (в зависимости от номинала).TODD писал(а):ну и смотря какие смд закажу - размеры-т разные есть.. для меня желательно начинать с больших(3-4мм) - по крайней мере под ними можно дорожки провести - меньше перемычек делать
Код: Выделить всё
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
TIM3->PSC = 36000-1; // Настраиваем делитель чтоб таймер тикал 2000 раз в секунду
TIM3->ARR = 2001 ; // Чтоб прерывание случалось раз в секунду
TIM3->CR2 = TIM_CR2_MMS_1; // сброс ТIM2 ??????????????????????????
TIM3->DIER= TIM_DIER_CC4DE; // запрос ДМА по каналу сравнения
TIM3->DIER |= TIM_DIER_CC4IE; //прерывание
TIM3->CCMR1= TIM_CCMR1_OC1M_0; //TIMx_CNT==TIMx_CCR) OCxREF =1
TIM3->CR1 = TIM_CR1_ARPE;
TIM3->CCR1= 2000; //кода формируем запрос ДМА
TIM3->DIER |= TIM_DIER_UIE; //разрешаем прерывание от таймера
//таймер 2 - измеритель частоты
TIM2->ARR = 0xffff; // макс. значение до которого считаем
TIM2->PSC =0 ; // пред делитель
TIM2->CR1 = TIM_CR1_ARPE;
TIM2->SMCR |=TIM_SMCR_TS_0; //в режиме ведомого от таймера 3
TIM2->SMCR |=TIM_SMCR_SMS_2; // режим 100
TIM2->SMCR |= TIM_SMCR_ECE; // Включить режим внешнего тактирования
//настроим ДМА
RCC->AHBENR |= RCC_AHBENR_DMA1EN;
DMA1_Channel3->CMAR = (uint32_t) 0X20001000; //адрес буфера приемника
DMA1_Channel3->CPAR = (uint32_t) &TIM2->CNT; //регистр данных
DMA1_Channel3->CNDTR = FREQ_BUF_SIZE; //размер буфера
DMA1_Channel3->CCR = DMA_CCR3_MINC; //запись в память, инкремент указателя в памяти
DMA1_Channel3->CCR |= DMA_CCR3_TCIE; //канал 3
DMA1_Channel3->CCR |= DMA_CCR3_CIRC; //циклически
DMA1_Channel3->CCR |= DMA_CCR3_MSIZE_0;
DMA1_Channel3->CCR |= DMA_CCR3_PSIZE_0; //по 16 бит
DMA1_Channel3->CCR |= DMA_CCR3_TCIE; //прерывание по завершению
DMA1_Channel3->CCR |= DMA_CCR3_EN; //разрешим работу
TIM3->CR1 |= TIM_CR1_CEN ; // Начать отсчёт!
TIM2->CR1 |=TIM_CR1_CEN;
NVIC_EnableIRQ (DMA1_Channel3_IRQn);
Код: Выделить всё
GPIO_SetBits(GPIOA,GPIO_Pin_0);
for(i=0;i<50000;i++){}
GPIO_ResetBits(GPIOA,GPIO_Pin_0);