Здравствуйте! Соединил плату с компьютером,научился отправлять с платы слова,теперь хочу научиться принимать что-то. Суть такая:при отправлении "5" должен загореться светодиод подключенный к порту PC9. Программы из различных статей хорошо работают,а вот своя никак. Ошибок редактор не показывает,собирается программа успешно. Очень прошу помощи,заранее спасибо!
Вот еще вопрос...почему перед главной функцией int а не void? Что она принимает то?
Раздел: STM32
#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