Например TDA7294

Форум РадиоКот • Просмотр темы - HC-06 на STM32F100
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пн дек 15, 2025 01:12:24

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: HC-06 на STM32F100
СообщениеДобавлено: Вт апр 16, 2013 21:13:54 
Потрогал лапой паяльник
Аватар пользователя

Карма: 10
Рейтинг сообщений: 29
Зарегистрирован: Сб апр 28, 2012 16:04:14
Сообщений: 394
Рейтинг сообщения: 0
Подключил HC-06 к STM32F100 по USART (выводы PA9, PA10)

Модуль включается.
К нему успешно подключается смартфон.
Смартфон на андроиде с установленным bluetooth терминалом.

Данные принимает.
При передаче символа, прерывание срабатывает 6-7 раз.
При этом выводит непонятные числа.

Вот к прмеру при вводе на терминале символа "z", в USART1->DR считываю вот такой массив:
120.128.248.120.248.0.128
При этом код состояния USART1->SR везде 128.

Может кто знает что не так ?

Код:
#include "stm32f10x.h" 
#include "mcu_gpio.h"

void usart_init_2 (void) {
          RCC->CR|=RCC_CR_HSEON; // Включить генератор HSE.
          while (!(RCC->CR & RCC_CR_HSERDY)) {} // Ожидание готовности HSE.
          RCC->CFGR &=~RCC_CFGR_SW; // Очистить биты SW0, SW1.
          RCC->CFGR |= RCC_CFGR_SW_HSE; // Выбрать HSE для тактирования SW0=1.
          RCC->APB2ENR|= RCC_APB2ENR_IOPAEN; // Разрешить тактирование порта A.
          RCC->APB2ENR|= RCC_APB2ENR_AFIOEN; // Тактирование альтернативных функций GPIO.
          RCC->APB2ENR|= RCC_APB2ENR_USART1EN; // Включение тактирования USART1.
          GPIOA->CRH |= GPIO_CRH_MODE9; // Вывод TX PA.9 - на выход.
          GPIOA->CRH &=~GPIO_CRH_CNF9; GPIOA->CRH |=GPIO_CRH_CNF9_1; // Альтернативный выход.
          USART1->CR1 |=(USART_CR1_RE | USART_CR1_TE); // Разрешить выводы RX, TX.
          // Скорость 115.2 kbps. USARTDIV=FSYS/(16*baud) = 8e6/(16*115200)=4.34.
         
         
         // USART1->BRR=(4<<4); // Целая часть коэффициента деления USART1.
        //  USART1->BRR|=5; // Дробная часть*16 = 0,34*16 = 5 (окр).
         
         
           USART1->BRR=(13<<4); // Целая часть коэффициента деления USART1.
           USART1->BRR|=0; // Дробная часть*16 = 0,34*16 = 5 (окр).
         
         
           USART1->CR1 |=USART_CR1_UE; // Включение USART1.

       // Затем задаем событие(я), которые будут генерить прерывания:
     USART1->CR1  |= USART_CR1_TCIE;         //прерывание по окончанию передачи
     USART1->CR1  |= USART_CR1_RXNEIE;       //прерывание по приему данных
     NVIC_EnableIRQ (USART1_IRQn);           //разрешить прерывания от USART1

}


// выполнение
int main (void) {

  usart_init_2 ();
 
  while (1)
  {
   }
}


// USART interrupt

 void USART1_IRQHandler(void)
{
 
 
 unsigned char tmp;
 
 //
  if((USART1->SR & USART_SR_RXNE)!=0)
  {
     
    tmp = USART1->DR;                   //прочитать принятый байт
  }
 
  //если причина прерывания  окончание передачи
  if((USART1->SR & USART_SR_TC)!=0)
  {
    USART1->SR &= ~USART_SR_TC;         //очистить флаг
  }
}

_________________
Критикуешь - предлагай. Предлагаешь - делай. Делаешь - отвечай.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ 1 сообщение ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y