Я отправляю данные через USART2 PA2 (pin2) на передатчик данных, подключил usb-uart к PA2 (pin2) и посмотрел в терминале, что отправляется (AA 44 11 55 AA 44 22 66 AA 44 11 55 AA 44 22 66 ...). Все в порядке, я передаю то, что хочу.
Затем я подключил usb-uart к PA10 (pin10) и посмотрел что приходит через радио приемник, было много данных, но в основном были (AA 44 11 55 AA 44 22 66 AA 44 11 55 AA 44 22 66 ...). Все в порядке, я получаю от приемника, то что нужно.
Затем подключил usb-uart на PA9 (pin9) (uart1 TX) и посмотрели что он передает (AA 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 ...).
Главный вопрос: что я делаю неправильно, почему USART1 TX искажает данные? Как это исправить?
#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
# define SYNC 0XAA
# define RADDR 0x44
# define LEDON 0x11 //switch led on command
# define LEDOFF 0x22 //switch led off command
void Delay(void) {
volatile uint32_t i;
for (i = 0; i != 100; i++)
;
}
void send_to_uart1(uint8_t data) {
while (!(USART1 - > SR & USART_SR_TXE)) {}
USART1 - > DR = data;
}
void send_to_uart2(uint8_t data) {
while (!(USART2 - > SR & USART_SR_TXE));
USART2 - > DR = data;
}
void Send_Packet(uint8_t addr, uint8_t cmd) {
send_to_uart2(SYNC); //send synchro byte
send_to_uart2(addr); //send receiver address
send_to_uart2(cmd); //send increment command
send_to_uart2((addr + cmd)); //send checksum
}
uint8_t uart_data;
int main(void) {
GPIO_InitTypeDef PORTA_init_struct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
PORTA_init_struct.GPIO_Pin = GPIO_Pin_9;
PORTA_init_struct.GPIO_Speed = GPIO_Speed_2MHz;
PORTA_init_struct.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, & PORTA_init_struct);
PORTA_init_struct.GPIO_Pin = GPIO_Pin_10;
PORTA_init_struct.GPIO_Speed = GPIO_Speed_50MHz;
PORTA_init_struct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, & PORTA_init_struct);
PORTA_init_struct.GPIO_Pin = GPIO_Pin_2;
PORTA_init_struct.GPIO_Speed = GPIO_Speed_50MHz;
PORTA_init_struct.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, & PORTA_init_struct);
PORTA_init_struct.GPIO_Pin = GPIO_Pin_3;
PORTA_init_struct.GPIO_Speed = GPIO_Speed_50MHz;
PORTA_init_struct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, & PORTA_init_struct);
USART_InitTypeDef uart_struct1;
uart_struct1.USART_BaudRate = 600;
uart_struct1.USART_WordLength = USART_WordLength_8b;
uart_struct1.USART_StopBits = USART_StopBits_1;
uart_struct1.USART_Parity = USART_Parity_No;
uart_struct1.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
uart_struct1.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART1, & uart_struct1);
USART_Cmd(USART1, ENABLE);
USART_InitTypeDef uart_struct2;
uart_struct2.USART_BaudRate = 600;
uart_struct2.USART_WordLength = USART_WordLength_8b;
uart_struct2.USART_StopBits = USART_StopBits_1;
uart_struct2.USART_Parity = USART_Parity_No;
uart_struct2.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
uart_struct2.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART2, & uart_struct2);
USART_Cmd(USART2, ENABLE);
uint8_t raddress, data, chk;
while (1) {
Send_Packet(RADDR, LEDON);
Delay();
Send_Packet(RADDR, LEDOFF);
Delay();
if (USART1 - > SR & USART_SR_RXNE) {
uart_data = USART1 - > DR;
send_to_uart1(uart_data);
}
}
}