Потихоньку осваиваю STM32VLDiscovery.
Написал код, который банально заменить конструкцию ",," на "0,".
Но он почему-то не работает как надо.
Подскажите в чем моя ошибка
Код под спойлером:
CODE
#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_usart.h"
#include "string.h"
#include "stdio.h"
#include "gps_parser.h"
#define buflength (700)
char uart1_rx_buf[buflength]; //Буфер для приёма сообщения.
volatile unsigned int uart1_rx_bit; //Номер байта UART принимаемого в буфер.
//Структуры для инициализации GPIOA и USART1
GPIO_InitTypeDef GPIO_InitStruct;
USART_InitTypeDef USART_InitStruct;
int main(void)
{
// Включаем модули USART1 и GPIOA, а также включаем альтернативные функции выходов
RCC->APB2ENR|= RCC_APB2ENR_USART1EN | RCC_APB2ENR_IOPAEN | RCC_APB2ENR_AFIOEN;
// Контакт PA9 будет выходом с альтернативной функцией, а контакт PA10 - входом
GPIOA->CRH &= !GPIO_CRH_CNF9;
GPIOA->CRH |= GPIO_CRH_CNF9_1 | GPIO_CRH_MODE9_0 | GPIO_CRH_CNF10_0;
// Настраиваем регистр тактирования, скорость составит 9600 бод (при тактовой частоте 24 МГц)
USART1->BRR = 0xD0;
// Выключаем TxD и RxD USART
USART1->CR1 |= USART_CR1_TE | USART_CR1_RE;
// Запускаем модуль USART
USART1->CR1 |= USART_CR1_UE;
// Разрешаем прерывание по приёму информации с RxD
USART1->CR1 |= USART_CR1_RXNEIE;
// Назначаем обработчик для всех прерываний от USART1
NVIC_EnableIRQ(USART1_IRQn);
// Бесконечный цикл
while(1);
}
void USART1_Send(char chr) {
USART1->DR = chr;
}
void USART1_Send_String(char* str) {
int i=0;
while(str[i])
USART1_Send(str[i++]);
}
// Обработчик всех прерываний от USART1
void USART1_IRQHandler(void) {
if (USART1->SR & USART_SR_RXNE) //Проверяем, прило ли чтонибудь в UART
{
uart1_rx_buf[uart1_rx_bit]=USART1->DR; //Помещаем принятый байт в буфер.
if ((uart1_rx_buf[uart1_rx_bit]==",")&&(uart1_rx_buf[uart1_rx_bit-1]==",")) //Если пришло сообщение о нажатии
{
uart1_rx_buf[uart1_rx_bit] = "0";
uart1_rx_buf[uart1_rx_bit+1] = ",";
}
}
USART1_Send_String(uart1_rx_buf);
}
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_usart.h"
#include "string.h"
#include "stdio.h"
#include "gps_parser.h"
#define buflength (700)
char uart1_rx_buf[buflength]; //Буфер для приёма сообщения.
volatile unsigned int uart1_rx_bit; //Номер байта UART принимаемого в буфер.
//Структуры для инициализации GPIOA и USART1
GPIO_InitTypeDef GPIO_InitStruct;
USART_InitTypeDef USART_InitStruct;
int main(void)
{
// Включаем модули USART1 и GPIOA, а также включаем альтернативные функции выходов
RCC->APB2ENR|= RCC_APB2ENR_USART1EN | RCC_APB2ENR_IOPAEN | RCC_APB2ENR_AFIOEN;
// Контакт PA9 будет выходом с альтернативной функцией, а контакт PA10 - входом
GPIOA->CRH &= !GPIO_CRH_CNF9;
GPIOA->CRH |= GPIO_CRH_CNF9_1 | GPIO_CRH_MODE9_0 | GPIO_CRH_CNF10_0;
// Настраиваем регистр тактирования, скорость составит 9600 бод (при тактовой частоте 24 МГц)
USART1->BRR = 0xD0;
// Выключаем TxD и RxD USART
USART1->CR1 |= USART_CR1_TE | USART_CR1_RE;
// Запускаем модуль USART
USART1->CR1 |= USART_CR1_UE;
// Разрешаем прерывание по приёму информации с RxD
USART1->CR1 |= USART_CR1_RXNEIE;
// Назначаем обработчик для всех прерываний от USART1
NVIC_EnableIRQ(USART1_IRQn);
// Бесконечный цикл
while(1);
}
void USART1_Send(char chr) {
USART1->DR = chr;
}
void USART1_Send_String(char* str) {
int i=0;
while(str[i])
USART1_Send(str[i++]);
}
// Обработчик всех прерываний от USART1
void USART1_IRQHandler(void) {
if (USART1->SR & USART_SR_RXNE) //Проверяем, прило ли чтонибудь в UART
{
uart1_rx_buf[uart1_rx_bit]=USART1->DR; //Помещаем принятый байт в буфер.
if ((uart1_rx_buf[uart1_rx_bit]==",")&&(uart1_rx_buf[uart1_rx_bit-1]==",")) //Если пришло сообщение о нажатии
{
uart1_rx_buf[uart1_rx_bit] = "0";
uart1_rx_buf[uart1_rx_bit+1] = ",";
}
}
USART1_Send_String(uart1_rx_buf);
}