Uart В Stm32Vl

24-06-2013, 11:30 От: admin Посмотрели: 789
Здравствуйте! Соединил плату с компьютером,научился отправлять с платы слова,теперь хочу научиться принимать что-то. Суть такая:при отправлении "5" должен загореться светодиод подключенный к порту PC9. Программы из различных статей хорошо работают,а вот своя никак. Ошибок редактор не показывает,собирается программа успешно. Очень прошу помощи,заранее спасибо!

#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_usart.h"

int main(void)
{
RCC->APB2ENR |= RCC_APB2ENR_IOPCEN; // Разрешить тактирование GPIOC
//Конфигурирование GPIOC.9
GPIOC->CRH &= ~GPIO_CRH_MODE9; //очистить разряды MODE
GPIOC->CRH &= ~GPIO_CRH_CNF9; //очистить разряды CNF
GPIOC->CRH |= GPIO_CRH_MODE9_1; //выход, 2MHz
GPIOC->CRH &= ~GPIO_CRH_CNF9; //общего назначения, симетричный
//Включение тактирования
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; //Тактирование GPIO
RCC->APB2ENR |= RCC_APB2ENR_AFIOEN; //Тактирование альтернативных функций GPIO
RCC->APB2ENR |= RCC_APB2ENR_USART1EN; //Тактирование USART1
//Конфигурирование PORTA.9 для TX; PORTA.10 для RX
GPIOA->CRH &= ~(GPIO_CRH_MODE9 | GPIO_CRH_CNF9); //Предочистка MODE и CNF
GPIOA->CRH |= GPIO_CRH_MODE9 | GPIO_CRH_CNF9_1; //Двухтактный выход с альтернативной ф-ей, 50MHz
GPIOA->CRH &= ~(GPIO_CRH_MODE10 | GPIO_CRH_CNF10); //Предочистка MODE и CNF
GPIOA->CRH |= GPIO_CRH_CNF10_0; //Вход, третье состояние
//Задание режима работы
USART1->BRR = 0x9c4; //Cкорость обмена 9600 бод
USART1->CR1 &= ~USART_CR1_M; //8 бит данных
USART1->CR2 &= ~USART_CR2_STOP; //Количество стоп-битов: 1
//Управление работой
USART1->CR1 |= USART_CR1_UE; //Включение модуля USART1
USART1->CR1 &= ~USART_CR1_TE; //Отключить передатчик
USART1->CR1 |= USART_CR1_RE; //Включение приемника
//Разрешить прерывания
NVIC_EnableIRQ (USART1_IRQn); //Прерывания USART1
USART1->CR1 |= USART_CR1_RXNEIE; //Прерывание по завершении приема
while(1){
unsigned char tmp; //для временного хранения

//Если причина прерывания окончание приема байта
if((USART1->SR & USART_SR_RXNE)!=0)
{
tmp = USART1->DR; //прочитать принятый байт
//можно выполнить другие действия
if(tmp=='5'){
GPIOC->BSRR = GPIO_BSRR_BS9; //GPIOC.9=1
}
}}}



Вот еще вопрос...почему перед главной функцией int а не void? Что она принимает то?
Раздел: STM32

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться, либо войти на сайт под своим именем.

Обсудить на форуме


На момент добавления Uart В Stm32Vl все ссылки были рабочие.
Все публикации статей, книг и журналов, представлены на этом сайте, исключительно для ознакомления,
авторские права на эти публикации принадлежат авторам статей, книг и издательствам журналов!
Подробно тут | Жалоба
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.


Опрос

Ваши предпочтения в TRX


Одинарное преобразование
Двойное преобразование
Прямое преобразование
SDR
Другое
Мне всё равно

Популярные новости
Календарь новостей
«    Май 2024    »
ПнВтСрЧтПтСбВс
 12345
6789101112
13141516171819
20212223242526
2728293031