Появился вопросик по USART. Ну скорее не по самому USART...
В общем не могу понять как реализовать прием строки, для дальнейшей ее обработки. Вроде лопатил указатели, но все равно никак не могу допереть.
Код: Выделить всё
#include "usart.h"
/*############USART initialize############*/
void Usart_Init(){
//Clocking USART port
RCC->AHB1ENR = RCC_AHB1ENR_GPIOBEN;
RCC->APB2ENR |= RCC_APB2ENR_USART1EN;
GPIOB->MODER &=~ GPIO_MODER_MODER6 | GPIO_MODER_MODER7;
GPIOB->MODER |= GPIO_MODER_MODER6_1 | GPIO_MODER_MODER7_1;
GPIOB->AFR[0] |= 0x77000000;
GPIOB->OTYPER = 0;
//Configure USART
USART1->BRR |= 0x341;//19200
USART1->CR2 = 0;
USART1->CR3 = 0;
//Enable working
USART1->CR1 |= USART_CR1_UE|USART_CR1_RE|USART_CR1_TE;//Enable USART1|Enable receive|Enable transmit
NVIC_EnableIRQ (USART1_IRQn); //Enable USART interrupts
//USART1->CR1 |= USART_CR1_TCIE; Enable transmit comlete interrupts
USART1->CR1 |= USART_CR1_RXNEIE; //Enable receive interupts
}
/*########################################*/
/*############Write to console############*/
//Write data to cosole;
void Usart_Transmit(uint8_t Data){
while(!(USART1->SR & USART_SR_TC)){};
USART1->DR = Data;
}
//Write String to console;
void Usart_Str(const char * data){
char c;
while((c=*data ++)){
Usart_Transmit (c);
}
}
/*########################################*/
/*############Read char from console############*/
char Usart_Read_Ch(){
char t = (char)USART1->DR;
return t;
}
/*##############################################*/
/*############Read string from console############*/
void Usart_Read_Str(){
char buff[16];
buff[i] = Usart_Read_Ch();
if(buff[i] != '\r') {
Usart_Transmit(buff[i]);
i++;
}
else {
Usart_Str("\n \r");
}
/*тут по идее я должен возвращать указатель char * str, тогда и функция должна быть char* Usart_Read_Str
Ну и еще вроде как я понимаю, что я должен в цикле по длине буфера написать str[i] = buffer[i], и после цикла написать return str;
???
*/
}
/*################################################*/
void USART1_IRQHandler(){
if(USART1->SR & USART_SR_RXNE)
{
Usart_Read_Str();
}
}

