Ср апр 25, 2018 12:55:16
//--- Конфиг USART1 ----------
USART1->BRR = 0x88C;
USART1->CR1 = USART_CR1_UE | USART_CR1_TE | USART_CR1_RE | USART_CR1_RXNEIE | USART_CR1_TCIE;
NVIC_SetPriority (USART1_IRQn, 2);
NVIC_EnableIRQ(USART1_IRQn);
//----------
void put_char_rs232(uint8_t data){
while(!(USART1->SR & USART_SR_TC));
USART1->DR = data;
}
void USART1_IRQHandler(){
if (USART1->SR & USART_SR_RXNE){
USART1->SR&=~USART_SR_RXNE;
uart_data = USART1->DR;
}
if(USART1->SR & USART_SR_TC){
USART1->SR&=~USART_SR_TC;
if(UartAnswers--) USART1->DR = 'S';
}
}
UartAnswers = 2;
put_char_rs232('B');
Ср апр 25, 2018 13:09:04
Ср апр 25, 2018 13:20:50
void Start_DMA_USART1_Tx (uint8_t am_bytes, uint8_t *m_data){
DMA2_Stream7->CR = 0; // Отключаем поток. Нужно обеспечить, чтобы не была вызвана
// функция Start_DMA_USART3_Rx, когда предыдущая передача
// еще не завершилась, иначе данные будут потеряны.
while(DMA2_Stream7->CR & DMA_SxCR_EN); // ждем пока поток эффективно остановится
// поток готов к настройке
DMA2_Stream7->PAR = (uint32_t) & USART1->DR; // устанавливаем адрес периферии
DMA2_Stream7->M0AR = (uint32_t) m_data;
DMA2_Stream7->NDTR = am_bytes; // количество байт
DMA2_Stream7->CR = DMA_SxCR_EN | DMA_SxCR_DIR_0 | DMA_SxCR_CHSEL_2 | DMA_SxCR_MINC | DMA_SxCR_TCIE ;
USART1->CR3 |= USART_CR3_DMAT;
NVIC_EnableIRQ( DMA2_Stream7_IRQn );
}
void Start_DMA_USART6_Tx (uint8_t am_bytes, uint8_t *m_data){
DMA2_Stream7->CR = 0; // Отключаем поток. Нужно обеспечить, чтобы не была вызвана
// функция Start_DMA_USART3_Rx, когда предыдущая передача
// еще не завершилась, иначе данные будут потеряны.
while(DMA2_Stream7->CR & DMA_SxCR_EN); // ждем пока поток эффективно остановится
// поток готов к настройке
DMA2_Stream7->PAR = (uint32_t) & USART6->DR; // устанавливаем адрес периферии
DMA2_Stream7->M0AR = (uint32_t) m_data;
DMA2_Stream7->NDTR = am_bytes; // количество байт
DMA2_Stream7->CR = DMA_SxCR_EN | DMA_SxCR_DIR_0 | DMA_SxCR_CHSEL_2 | DMA_SxCR_CHSEL_0 |DMA_SxCR_MINC | DMA_SxCR_TCIE ;
USART6->CR3 |= USART_CR3_DMAT;
NVIC_EnableIRQ( DMA2_Stream7_IRQn );
}
Start_DMA_USART1_Tx(rec_bt, config_6);
Start_DMA_USART6_Tx(rec_bt, config_6);
DMA2_Stream7->CR |= DMA_SxCR_EN;
Ср апр 25, 2018 13:21:10
Ср апр 25, 2018 13:27:14
Ср апр 25, 2018 13:32:36
Ср апр 25, 2018 13:36:52
void DMA2_Stream7_IRQHandler(void){
if( DMA2->HISR & DMA_HISR_TCIF7){
DMA2->HIFCR = DMA_HIFCR_CTCIF7;
if((DMAState)<1){
Start_DMA_USART6_Tx(rec_bt, config_6);
DMAState++;
}
else{
DMA2_Stream7->CR &=~ DMA_SxCR_EN;
}
}
}