DeL Опубликовано 25 сентября, 2013 Жалоба Поделиться Опубликовано 25 сентября, 2013 Есть кто-нибудь кто шарит)а то возникло пару вопросов в прошивке мк Ссылка на комментарий
hook Опубликовано 25 сентября, 2013 Жалоба Поделиться Опубликовано 25 сентября, 2013 Какой МК? Ссылка на комментарий
DeL Опубликовано 26 сентября, 2013 Автор Жалоба Поделиться Опубликовано 26 сентября, 2013 stm32f100rbЗадача состоит в том, чтобы подсоединить к МК датчик температуры и передавать показания с него с помощью радиомодуля(rs232) в эфир.Как это все организовать в программном коде?Используем COOCOX. В шитом примере есть разъяснения как сделать ADC+DMA. Вопрос: получается с датчика падает какое-то напряжение на МК, его мы оцифровываем по средству АЦП, потом цифра идет в ДМА память и передается через радомодуль? вот как связать ДМА и радиомодуль и вообще правильный ход мыслей? Ссылка на комментарий
4pok Опубликовано 27 сентября, 2013 Жалоба Поделиться Опубликовано 27 сентября, 2013 Думаю, что тебе необходимо настроить UART своего контроллера на передачу данных в радиомодуль, после чего сконфигурировать радиомодуль, если требуется, и передавать данные. Ничего нестандартного в UART-е нет, так что, кури даташиты. Ссылка на комментарий
DeL Опубликовано 3 декабря, 2013 Автор Жалоба Поделиться Опубликовано 3 декабря, 2013 4pok#include#include#include#include#include "stm32f10x.h"int main(void){ GPIO_InitTypeDef PORT; //Включаем порты А и С RCC_APB2PeriphClockCmd((RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOA) , ENABLE); GPIO_Init( GPIOC , &PORT); //Порт A настраивать смысла нет, все его ноги по умолчанию входы что нам и нужно 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; //Преобразование инжектированной группы //запустится установкой бита JSWSTART ADC1->CR2 |= ADC_CR2_JEXTTRIG; //Разрешаем внешний запуск инжектированной группы ADC1->CR2 |= ADC_CR2_CONT; //Преобразования запускаются одно за другим ADC1->CR1 |= ADC_CR1_JAUTO; //Разрешить преобразование инжектированной группы //после регулярной. Не понятно зачем, но без этого не работает ADC1->JSQR |= (1<<15); //Задаем номер канала (выбран ADC1) ADC1->CR2 |= ADC_CR2_ADON;//Теперь включаем АЦП ADC1->CR2 |= ADC_CR2_JSWSTART; //Запуск преобразований while (!(ADC1->SR & ADC_SR_JEOC)) //ждем пока первое преобразование завершится ; //Теперь можно читать результат из JDR1 void UART_init(void){ // тактируюсь от кварца на 12 МГц // включаю тактирование ЮАРТ1 и порта на которам он висит RCC->APB2ENR |= RCC_APB2ENR_USART1EN; RCC->APB2ENR|= RCC_APB2ENR_AFIOEN; RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; // настраиваю соответсв. порты на вход и выход от расшир. функций GPIOA->CRH &= ~GPIO_CRH_MODE9; GPIOA->CRH &= ~GPIO_CRH_CNF9; GPIOA->CRH &= ~GPIO_CRH_MODE10; GPIOA->CRH &= ~GPIO_CRH_CNF10; GPIOA->CRH |= GPIO_CRH_MODE9_1; // выход на 2 МГц GPIOA->CRH |= GPIO_CRH_CNF9_1; GPIOA->CRH |= GPIO_CRH_CNF10_0; // 12 МГц/16*115200 = 6.5 USART1->BRR = (6 << 4) + 8; // включаю ЮАРТ USART1->CR1 |= USART_CR1_UE; USART1->CR1 |= USART_CR1_TE; // включил передатчик USART1->CR1 |= USART_CR1_RE; // включил приемник}// будет передавать данные с АЦП в ЮАРТ по инициативе АЦП, использую 1 канал ПДПvoid DMA_init (void){ RCC->AHBENR |= RCC_AHBENR_DMA1EN; // подаю такты на DMA1 DMA1_Channel1->CPAR = (uint32_t) &ADC1->DR; // адрес периферии DMA1_Channel1->CMAR = (uint32_t) &USART1->DR; // адрес памяти DMA1_Channel1->CNDTR = 1; // количество передач данных, у меня цыклическая передача, счетчик после достижения 0 будет обновляться// так получилось что значения по умолчанию меня устраивают (т.е. чтение из периферии, 8 бит, без инкримента и т.д.) DMA1_Channel1->CCR |= DMA_CCR1_CIRC; // цыклическая передача DMA1_Channel1->CCR |= DMA_CCR1_EN; // включаем}void USART1_IRQHandler (void){ USART1->DR = USART1->DR; // эхо по приему, флаг прерывание автоматически сбрасывается после чтения}}получатеся у меня такой алгоритм:1. включаем порты, включаем АDC1, инжектированную группу2. включаем, настраиваем UART3. настраиваем DMA,чтоб читал с ADC1но ничего не работает Ссылка на комментарий
cmyk-service Опубликовано 8 декабря, 2013 Жалоба Поделиться Опубликовано 8 декабря, 2013 Надо проверять все этапы работы программы. Что именно у вас не работает? Ссылка на комментарий
DeL Опубликовано 11 декабря, 2013 Автор Жалоба Поделиться Опубликовано 11 декабря, 2013 cmyk-serviceну в общем нету передачи, в регистрах смотрю АДС- изменяется там что-то, в ДМА-тоже, в ЮСАРТ- тоже, но радиомодуль молчит Ссылка на комментарий
DeL Опубликовано 13 февраля, 2014 Автор Жалоба Поделиться Опубликовано 13 февраля, 2014 http://forum.easyelectronics.ru/viewtopic.php?f=35&t=17925Может кто поможет? Ссылка на комментарий
1ceman Опубликовано 13 февраля, 2014 Жалоба Поделиться Опубликовано 13 февраля, 2014 DeL, спросите на хабре, там много любителей. Ссылка на комментарий
BIT Опубликовано 13 февраля, 2014 Жалоба Поделиться Опубликовано 13 февраля, 2014 http://forum.easyelectronics.ru/viewtopic.php?f=35&t=17925Может кто поможет? А не секрет это куда такая тема ? Ссылка на комментарий
Рекомендуемые сообщения
Пожалуйста, войдите, чтобы комментировать
Вы сможете оставить комментарий после входа в
Войти