ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
24 ноября
1430799 Топик полностью
mse homjak (28.04.2024 19:58, просмотров: 264) ответил Mty1 на А кто нибудь делал обработчик UART прерывания на регистрах, без HAL? Задолбался я с HAL - вроде поначалу просто, а как нужно буференный вывод сделать, так нужно из буфера по 1 байту в HAL_UART_Transmit_IT() пихать.
У чом промблемма? Референс мануал:регистер дескрипшен: 
void UART2setup(void)
{
	RCC->APB1PCENR |= RCC_USART2EN;
	USART2->CTLR2 =(uint16_t)0;
	USART2->CTLR1 =(uint16_t)0;
	USART2->CTLR3 =(uint16_t)0;
	USART2->CTLR1 =USART_Enable|USART_Mode_Rx|USART_Mode_Tx|USART_IT_RXDNE;
	USART2->BRR = (uint16_t)baudesRate115200;
	NVIC_EnableIRQ(USART2_IRQn);
	UARTcommandDataBuffer[0]=(uint8_t)1;
}
void USART2_IRQHandler(void) { uint8_t tmp; static int status; USART2->STATR&=~USART_STATR_RXNE; tmp=USART2->DATAR; if (tmp!=(uint8_t)0x0d) { if (tmp!=(uint8_t)0x0a) { UARTcommandDataBuffer[UARTcommandDataBuffer[0]++]=tmp; if(UARTcommandDataBuffer[0]>=((sizeof UARTcommandDataBuffer)/(sizeof UARTcommandDataBuffer[0]))) { UARTcommandDataBuffer[0]=(uint8_t)0xf; status=(int)-1; } else { status=(int)0; } } } else { UARTcommandDataBuffer[UARTcommandDataBuffer[0]++]=tmp; if(status==0) { UARTstringReady=UARTcommStatusReady; } else { UARTstringReady=UARTcommStatusError; } } }