ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
19 июля
89819 Топик полностью
Сергей Борщ (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, остальное компилятор посчитатет сам (и каждый раз без ошибок)