| Форум РадиоКот https://radiokot.ru/forum/ |
|
| HC-06 на STM32F100 https://radiokot.ru/forum/viewtopic.php?f=61&t=88412 |
Страница 1 из 1 |
| Автор: | sx386 [ Вт апр 16, 2013 21:13:54 ] |
| Заголовок сообщения: | HC-06 на STM32F100 |
Подключил 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 из 1 | Часовой пояс: UTC + 3 часа |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|


