реклама на сайте
подробности

 
 
> stm32l+HCE_RTC
Fedor
сообщение May 17 2012, 04:53
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 73
Регистрация: 26-10-05
Пользователь №: 10 125



Здравствуйте
Начал работать с STM32L152CB. Решил тактировать внутренний rtc от внешнего кварца HCE.
Использую кварц частотой 9830400Гц - ABM2 и программирую делитель на 16
Код
void RTC_Config(void)
{

    RTC_InitTypeDef RTC_InitStructure;
    ErrorStatus err;

    /* Enable the PWR clock */
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);


    PWR_RTCAccessCmd(ENABLE);

    RCC_RTCResetCmd(ENABLE);
    RCC_RTCResetCmd(DISABLE);

    RCC_RTCCLKCmd(DISABLE);

#if defined(LSE_CLOCK_RTC)

    RCC_LSEConfig(RCC_LSE_ON);

    /* Wait till LSI is ready */
    while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET) {
    }

    /* Select the RTC Clock Source */

    RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
#elif defined(LSI_CLOCK_RTC)
    RCC_LSICmd(ENABLE);
    while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET) {
    }

    /* Select the RTC Clock Source */

    RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);
#elif defined(HSE_CLOCK_RTC)
    RCC_HSEConfig(RCC_HSE_ON);
    while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET) {
    }
    RCC_RTCCLKConfig(RCC_RTCCLKSource_HSE_Div16);
#else
#error "Error define please RTC_CLK_SRC!"
#endif



#if defined(HSE_CLOCK_RTC)
    RTC_InitStructure.RTC_AsynchPrediv = (uint32_t)0x7F;
    RTC_InitStructure.RTC_SynchPrediv  = (uint32_t)0x12BF; /* ((9830400 /16) / (127+1)) = 4800  = (4800-1)*/
#else
    /* Calendar Configuration with LSI supposed at 32KHz */
    RTC_InitStructure.RTC_AsynchPrediv = 0x7F;
    RTC_InitStructure.RTC_SynchPrediv  = 0xFF; /* (32KHz / 128) - 1 = 0xFF*/
#endif

    RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24;

    if(!RTC_Init(&RTC_InitStructure)){
        TRACE_ERROR("RTCInit prescaler Error \r\n");
    }else{
        TRACE_INFO("RTCInit prescaler SUCCESS\n\r");
    }

      /* Enable the RTC Clock */
    RCC_RTCCLKCmd(ENABLE);

    /* Wait for RTC APB registers synchronisation */
    RTC_WaitForSynchro();

}

Но почему-то после инициализации часы идут раз в 10 быстрее
Непонятно вобщем что делаю не так.

И второе...
При работе с USART1 (пока только с ним и работал), если отправлять байты в прерывании по флагу USART_IT_TXE, целым приходит только первый байт из всей посылки, а если по флагу USART_IT_TC то все нормально, вобщем
вот так работает
Код
if(USART_GetITStatus(hw->us_base, USART_IT_TC) == SET) {
        //USART_ClearITPendingBit(hw->us_base, USART_IT_TC);
        if(pUs->state == US_ST_SENDFRAME) {
            pUs->tx.num++;
            // add next char to port
            if(pUs->tx.num == pUs->tx.size) {
                //USART_ITConfig(hw->us_base, USART_IT_TC, ENABLE);
                USART_ITConfig(hw->us_base, USART_IT_TC, DISABLE);
                USART_ClearITPendingBit(hw->us_base, USART_IT_TC);
                //pUs->state = US_ST_OK;
            } else {
                USART_SendData(hw->us_base , pUs->tx.buf[pUs->tx.num]);
                USART_ClearITPendingBit(hw->us_base, USART_IT_TC);
                //return;
            }
        } else {
            //USART_SendData(hw->us_base , pUs->tx.buf[pUs->tx.num]);
            //USART_ITConfig(hw->us_base, USART_IT_TXE, DISABLE);
        }
    }

а вот так нет
Код
if(USART_GetITStatus(hw->us_base, USART_IT_TXE) == SET) {
        //USART_ClearITPendingBit(hw->us_base, USART_IT_TC);
        if(pUs->state == US_ST_SENDFRAME) {
            pUs->tx.num++;
            // add next char to port
            if(pUs->tx.num >= pUs->tx.size) {
                USART_ITConfig(hw->us_base, USART_IT_TC, ENABLE);
                USART_ITConfig(hw->us_base, USART_IT_TXE, DISABLE);
            } else {
                USART_SendData(hw->us_base , pUs->tx.buf[pUs->tx.num]);
                //USART_ClearITPendingBit(hw->us_base, USART_IT_TXE);
            }
        } else {
            //USART_SendData(hw->us_base , pUs->tx.buf[pUs->tx.num]);
            USART_ITConfig(hw->us_base, USART_IT_TXE, DISABLE);
        }
    }

причем предыдущий кусок у меня работал на stm32F207
Заранее благодарю за ответы.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Fedor   stm32l+HCE_RTC   May 17 2012, 04:53
- - Fedor   Цитата(Fedor @ May 17 2012, 10:53) Здравс...   Jun 29 2012, 09:16


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th June 2025 - 13:51
Рейтинг@Mail.ru


Страница сгенерированна за 0.01329 секунд с 7
ELECTRONIX ©2004-2016