ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
25 декабря
392710 Топик полностью
Юрий_СВ (05.03.2013 20:01 - 20:03, просмотров: 762) ответил КТ на Это типа :"Пастернака не читал но осуждаю..." ? Что же мил человек не понравилось Вам в библиотеках от STM? Сделаны добротно, есть мощный хелп, куча примеров. Хочется велосипед поизобретать? Если не разобрались, не учите плохому других.
1) На счёт "Пастернака не читал но осуждаю..." - учите мат.часть и не плодите мифы (ссылка) 2) Вы лучше меня знаете что я читал, а что нет... http://lurkmore.to/%cd%e5_%f7%e8%f2%e0%eb,_%ed%ee_%ee%f1%f3%e6%e4%e0%fe
Если вам нравится когда использование библиотек приводит к двум страницам текста, там где с регистрами 10 строк - это ваше дело. (н-р, настройка портов и синхронизации) Но сами библиотеки просто грязно написаны студентами. Как такой кусок: ==================================================== /* Set CR bits depending on hclk value */ if((hclk >= 20000000)&&(hclk < 35000000)) { /* CSR Clock Range between 20-35 MHz */ tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div16; } else if((hclk >= 35000000)&&(hclk < 60000000)) { /* CSR Clock Range between 35-60 MHz */ tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div26; } else if((hclk >= 60000000)&&(hclk < 100000000)) { /* CSR Clock Range between 60-100 MHz */ tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div42; } else if((hclk >= 100000000)&&(hclk < 150000000)) { /* CSR Clock Range between 100-150 MHz */ tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div62; } else /* ((hclk >= 150000000)&&(hclk <= 168000000)) */ { /* CSR Clock Range between 150-168 MHz */ tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div102; } --------------- Я бы написал так: --------------- // Configure the ETHERNET CSR Clock Range - Set CR bits depending on hclk value do // sy { if(hclk < 20000000) break; // нужно ли ? так в оригинальном файле if(hclk < 35000000) {tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div16; break;} // 20- 35 MHz if(hclk < 60000000) {tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div26; break;} // 35- 60 MHz if(hclk < 100000000){tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div42; break;} // 60-100 MHz if(hclk < 150000000){tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div62; break;} // 100-150 MHz tmpreg |= (uint32_t)ETH_MACMIIAR_CR_Div102; // 150-168 MHz } while(0); ETH->MACMIIAR = (uint32_t)tmpreg; Или такой: ======================================================== /* We wait for linked status... */ do { timeout++; } while (!(ETH_ReadPHYRegister(PHYAddress, PHY_BSR) & PHY_Linked_Status) && (timeout < PHY_READ_TO)); /* Return ERROR in case of timeout */ if(timeout == PHY_READ_TO) { return ETH_ERROR; } --------------- Я бы написал так: --------------- while(1) // wait for linked status { if( (++timeout) >= PHY_READ_TO) return ETH_ERROR; // timeout if(ETH_ReadPHYRegister(PHYAddress, PHY_BSR) & PHY_Linked_Status) break; }