Ср фев 13, 2019 09:36:58
Ср фев 13, 2019 11:00:08
Ср фев 13, 2019 11:07:41
Ср фев 13, 2019 11:23:48
Ср фев 13, 2019 14:03:22
Ср фев 13, 2019 14:32:53
Ср фев 13, 2019 14:41:41
Ср фев 13, 2019 14:51:00
Чт фев 14, 2019 09:46:04
Чт фев 14, 2019 09:53:38
Чт фев 14, 2019 10:19:51
Чт фев 14, 2019 10:37:54
Чт фев 14, 2019 13:05:22
Чт фев 14, 2019 17:12:51
Чт фев 14, 2019 17:38:53
Но таймер у меня 16 битный без делителя, на 48 МГц работает, частоту только с помощью регистра сравнения меняю, поэтому доситывать до переполнения будет быстро.
Здесь что то другое.
Вс фев 17, 2019 16:21:35
#include "stm32f0xx.h"
uint16_t buff[100];
void DMA1_Channel1_IRQHandler(void){
//empty
}
void DMA1_Channel2_3_IRQHandler(void){
//empty
}
void gpio_ini(){
RCC->AHBENR |= RCC_AHBENR_GPIOBEN;
GPIOB->MODER |= GPIO_MODER_MODER6_1 | GPIO_MODER_MODER0 | GPIO_MODER_MODER1;
GPIOB->OTYPER &= ~GPIO_OTYPER_OT_6;
GPIOB->PUPDR &= ~GPIO_PUPDR_PUPDR6_0;
GPIOB->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR6;
GPIOB->AFR[0] &= ~GPIO_AFRL_AFRL6;
}
void usart_ini(){
RCC->APB2ENR |= RCC_APB2ENR_USART1EN;
USART1->BRR = SystemCoreClock/256000;
USART1->CR3 = USART_CR3_DMAT;
USART1->CR1 |= USART_CR1_TE;
USART1->CR1 |= USART_CR1_TCIE;
USART1->CR1 |= USART_CR1_UE;
}
void adc_ini(){
RCC->APB2ENR |= RCC_APB2ENR_ADCEN;
ADC1->CHSELR |= ADC_CHSELR_CHSEL8 | ADC_CHSELR_CHSEL9;
ADC1->SMPR |= ADC_SMPR_SMP_2 | ADC_SMPR_SMP_0;
ADC1->CFGR2 |= ADC_CFGR2_CKMODE_1;
ADC1->CFGR1 &= ~ADC_CFGR1_SCANDIR;
ADC1->CFGR1 |= ADC_CFGR1_CONT;
ADC1->CFGR1 &= ~ADC_CFGR1_RES_Msk;
ADC1->CFGR1 |= ADC_CFGR1_DMACFG;
ADC1->CFGR1 |= ADC_CFGR1_DMAEN;
ADC1->CR |= ADC_CR_ADCAL;
while(ADC1->CR & ADC_CR_ADCAL){
}
ADC1->CR |= ADC_CR_ADEN;
}
void dma_ini(){
RCC->AHBENR |= RCC_AHBENR_DMAEN;
// DMA1 ADC->DMA init
DMA1_Channel1->CPAR |= (uint32_t)&ADC1->DR;
DMA1_Channel1->CMAR |= (uint32_t)&buff[0];
DMA1_Channel1->CNDTR |= 100;
DMA1_Channel1->CCR &= ~DMA_CCR_MEM2MEM_Msk;
DMA1_Channel1->CCR &= ~DMA_CCR_DIR;
DMA1_Channel1->CCR &= ~DMA_CCR_PL_Msk;
DMA1_Channel1->CCR |= DMA_CCR_MSIZE_0;
DMA1_Channel1->CCR |= DMA_CCR_PSIZE_0;
DMA1_Channel1->CCR |= DMA_CCR_MINC;
DMA1_Channel1->CCR |= DMA_CCR_CIRC;
DMA1_Channel1->CCR |= DMA_CCR_HTIE;
DMA1_Channel1->CCR |= DMA_CCR_TCIE;
DMA1_Channel1->CCR |= DMA_CCR_EN;
NVIC_EnableIRQ(DMA1_Channel1_IRQn);
NVIC_SetPriority(DMA1_Channel1_IRQn,2);
// DMA2 DMA->UART init
DMA1_Channel2->CPAR |= (uint32_t)&USART1->TDR;
DMA1_Channel2->CMAR |= (uint32_t)&buff[0];
DMA1_Channel2->CNDTR |= 100;
DMA1_Channel2->CCR &= ~DMA_CCR_MEM2MEM_Msk;
DMA1_Channel2->CCR |= DMA_CCR_DIR;
DMA1_Channel2->CCR &= ~DMA_CCR_PL_0;
DMA1_Channel2->CCR &= ~DMA_CCR_MSIZE_Msk;
DMA1_Channel2->CCR &= ~DMA_CCR_PSIZE_Msk;
DMA1_Channel2->CCR |= DMA_CCR_MINC;
DMA1_Channel2->CCR |= DMA_CCR_CIRC;
DMA1_Channel2->CCR |= DMA_CCR_HTIE;
DMA1_Channel2->CCR |= DMA_CCR_TCIE;
DMA1_Channel2->CCR |= DMA_CCR_EN;
NVIC_EnableIRQ(DMA1_Channel2_3_IRQn);
NVIC_SetPriority(DMA1_Channel2_3_IRQn,1);
}
int main(){
void __enable_irq(void);
NVIC->ISER[0] = 0x03<<7;
dma_ini();
gpio_ini();
adc_ini();
usart_ini();
ADC1->CR |= ADC_CR_ADSTART;
while(1){
//empty
}
return 0;
}
Ср фев 20, 2019 12:19:47
DMA1_Channel1->CPAR |= (uint32_t)&ADC1->DR;
DMA1_Channel1->CMAR |= (uint32_t)&buff[0];
DMA1_Channel1->CNDTR |= 100;
Ср фев 20, 2019 15:03:27
Ср фев 20, 2019 15:53:09
dosikus писал(а):Обычные ляпы?
Чт фев 21, 2019 07:57:05
DMA1_Channel1->CCR &= ~DMA_CCR_MEM2MEM_Msk;
DMA1_Channel1->CCR &= ~DMA_CCR_DIR;
DMA1_Channel1->CCR &= ~DMA_CCR_PL_Msk;
DMA1_Channel1->CCR |= DMA_CCR_MSIZE_0;
DMA1_Channel1->CCR |= DMA_CCR_PSIZE_0;
DMA1_Channel1->CCR |= DMA_CCR_MINC;
DMA1_Channel1->CCR |= DMA_CCR_CIRC;
DMA1_Channel1->CCR |= DMA_CCR_HTIE;
DMA1_Channel1->CCR |= DMA_CCR_TCIE;
DMA1_Channel1->CCR |= DMA_CCR_EN;