Проблема послать одновременно
Добавлено after 1 minute 21 second:При работе на разных потоках никаких проблем нет, на разных каналах - есть.
Добавлено after 3 minutes 4 seconds:Настройка DMA
Код:
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 );
}
Запуск отправки данных (с частотой 10 Гц)
Код:
Start_DMA_USART1_Tx(rec_bt, config_6);
Start_DMA_USART6_Tx(rec_bt, config_6);
DMA2_Stream7->CR |= DMA_SxCR_EN;
Добавлено after 4 minutes 30 seconds:При этом по USART1 прилетает хотя бы 1й байт массива, а вот по USART6 вообще тишина