Сергей Борщ (21.05.2007 13:09, просмотров: 1) ответил Lexales на Неправильно была выставлена чкорость обмена данными(U1DLL), вместо положенных 9600, она была 12000. А получилось так, потому что в Keil, стояла частота процессора 12 Mhz, вместо положенных моему
Вот поэтому я считаю вредным использование всяких "визардов" в компиляторах. <c>#define OSC 12800000UL
#define CCLK (OSC * 4)
#define PCLK (CCLK)
#define RS232_BAUDRATE 19200UL
#define RS485_BAUDRATE 115200UL
#define BAUD_CODE(baudrate) ((uint16_t)((PCLK / 16.0 / baudrate) + 0.5))
RS232_UART->LCR = (1 << UART_DLAB);
RS232_UART->DLM = BAUD_CODE(RS232_BAUDRATE) >> 8;
RS232_UART->DLL = BAUD_CODE(RS232_BAUDRATE) & 0xFF;
RS232_UART->LCR = (0 << UART_BC) | (0 << UART_PS) | (0 << UART_PE) | ( 0 << UART_SBS) | (3 << UART_WLS); // 8,n,1
RS485_UART->LCR = (1 << UART_DLAB);
RS485_UART->DLM = BAUD_CODE(RS485_BAUDRATE) >> 8;
RS485_UART->DLL = BAUD_CODE(RS485_BAUDRATE) & 0xFF;
RS485_UART->LCR = (0 << UART_BC) | (0 << UART_PS) | (0 << UART_PE) | ( 0 << UART_SBS) | (3 << UART_WLS); // 8,n,1
</c>Теперь при смене скорости или частоты кварца достаточно исправить один #define, остальное компилятор посчитатет сам (и каждый раз без ошибок)