28.06.2018, 18:42
|
|
Вид на жительство
Регистрация: 27.11.2007
Сообщений: 429
Сказал спасибо: 19
Сказали Спасибо 39 раз(а) в 30 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от prinv
|
Причём здесь HAL?
|
При том, что кусок из Хала.
|
|
|
|
28.06.2018, 18:42
|
|
Прописка
Регистрация: 05.09.2012
Адрес: Россия, Пермь
Сообщений: 160
Сказал спасибо: 25
Сказали Спасибо 31 раз(а) в 27 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от Исбанни
|
Многие ли ЗНАЮТ, что делать с HAL-не_ОКей, какие действия к нему приводят и что вообще это означает?
|
А тут HAL причём?
|
|
|
|
28.06.2018, 18:43
|
|
Вид на жительство
Регистрация: 27.11.2007
Сообщений: 429
Сказал спасибо: 19
Сказали Спасибо 39 раз(а) в 30 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
prinv, что Вы курите там?
|
|
|
|
28.06.2018, 18:47
|
|
Прописка
Регистрация: 21.04.2018
Сообщений: 174
Сказал спасибо: 1
Сказали Спасибо 66 раз(а) в 53 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
prinv, да, $#%ь, при том, что:
PHP код:
|
/* Receive data in 8 Bit mode */ if(hspi-›Init.DataSize == SPI_DATASIZE_8BIT) { while(hspi-›RxXferCount › 1) { /* Wait until RXNE flag is set */ if(SPI_WaitOnFlagUntilTimeout(hspi, SPI_FLAG_RXNE, RESET, Timeout) != HAL_OK) { return HAL_TIMEOUT; }
(*hspi-›pRxBuffPtr++) = hspi-›Instance-›DR; hspi-›RxXferCount--; }
|
это этот ваш самый HAL. А вы даже не знаете структуру HAL! А еще спрашиваете о какой-то $#%-ной "конкретике".
Вот вам КОНКРЕТИКА самая настоящая. КОНКРЕТНЕЕ НЕКУДА!
Причем, КОНКРЕТНО можете объяснить, на что именно и ЗАЧЕМ уходит процессорное время в этом HAL-овском куске кода, который в простой CMSIS-записи сокращается до банальных
while(READ_BIT(USED_SPI-›SR, SPI_SR_RXNE) == 0) { };
byte = USED_SPI-›DR;
Последний раз редактировалось Исбанни; 28.06.2018 в 18:55.
|
|
|
Сказали "Спасибо" Исбанни
|
|
|
28.06.2018, 18:56
|
|
Прописка
Регистрация: 21.04.2018
Сообщений: 174
Сказал спасибо: 1
Сказали Спасибо 66 раз(а) в 53 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Да о чем тут можно говорить?? Этот HAL-овод prinv не разбирается даже в собственном HAL-е!! Он просил "конкретики" - вот ему КОНКРЕТИКА, $#$@, а он даже ни слова не понял из конкретики, а в недоумении выдавил "А причем тут HAL_OK и HAL?" Ну о чем тут можно еще спорить?!
--------------------------
Ну ладно, конкретика так конкретика, #$%#.
ЧИСТА КОНКРЕТНЫЙ пример: (огромнейшая портянка кода, выполняющая SPI transmitt на HAL-е)
Нажмите, чтобы открыть спойлер
Код:
|
/**
* @brief Transmit an amount of data in blocking mode
* @param hspi: pointer to a SPI_HandleTypeDef structure that contains
* the configuration information for SPI module.
* @param pData: pointer to data buffer
* @param Size: amount of data to be sent
* @param Timeout: Timeout duration
* @retval HAL status
*/
HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout)
{
if(hspi-›State == HAL_SPI_STATE_READY)
{
if((pData == NULL ) || (Size == 0))
{
return HAL_ERROR;
}
/* Check the parameters */
assert_param(IS_SPI_DIRECTION_2LINES_OR_1LINE(hspi-›Init.Direction));
/* Process Locked */
__HAL_LOCK(hspi);
/* Configure communication */
hspi-›State = HAL_SPI_STATE_BUSY_TX;
hspi-›ErrorCode = HAL_SPI_ERROR_NONE;
hspi-›pTxBuffPtr = pData;
hspi-›TxXferSize = Size;
hspi-›TxXferCount = Size;
/*Init field not used in handle to zero */
hspi-›TxISR = 0;
hspi-›RxISR = 0;
hspi-›pRxBuffPtr = NULL;
hspi-›RxXferSize = 0;
hspi-›RxXferCount = 0;
/* Reset CRC Calculation */
if(hspi-›Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE)
{
SPI_RESET_CRC(hspi);
}
if(hspi-›Init.Direction == SPI_DIRECTION_1LINE)
{
/* Configure communication direction : 1Line */
SPI_1LINE_TX(hspi);
}
/* Check if the SPI is already enabled */
if((hspi-›Instance-›CR1 &SPI_CR1_SPE) != SPI_CR1_SPE)
{
/* Enable SPI peripheral */
__HAL_SPI_ENABLE(hspi);
}
/* Transmit data in 8 Bit mode */
if(hspi-›Init.DataSize == SPI_DATASIZE_8BIT)
{
if((hspi-›Init.Mode == SPI_MODE_SLAVE)|| (hspi-›TxXferCount == 0x01))
{
hspi-›Instance-›DR = (*hspi-›pTxBuffPtr++);
hspi-›TxXferCount--;
}
while(hspi-›TxXferCount › 0)
{
/* Wait until TXE flag is set to send data */
if(SPI_WaitOnFlagUntilTimeout(hspi, SPI_FLAG_TXE, RESET, Timeout) != HAL_OK)
{
return HAL_TIMEOUT;
}
hspi-›Instance-›DR = (*hspi-›pTxBuffPtr++);
hspi-›TxXferCount--;
}
/* Enable CRC Transmission */
if(hspi-›Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE)
{
SET_BIT(hspi-›Instance-›CR1, SPI_CR1_CRCNEXT);
}
}
/* Transmit data in 16 Bit mode */
else
{
if((hspi-›Init.Mode == SPI_MODE_SLAVE) || (hspi-›TxXferCount == 0x01))
{
hspi-›Instance-›DR = *((uint16_t*)hspi-›pTxBuffPtr);
hspi-›pTxBuffPtr+=2;
hspi-›TxXferCount--;
}
while(hspi-›TxXferCount › 0)
{
/* Wait until TXE flag is set to send data */
if(SPI_WaitOnFlagUntilTimeout(hspi, SPI_FLAG_TXE, RESET, Timeout) != HAL_OK)
{
return HAL_TIMEOUT;
}
hspi-›Instance-›DR = *((uint16_t*)hspi-›pTxBuffPtr);
hspi-›pTxBuffPtr+=2;
hspi-›TxXferCount--;
}
/* Enable CRC Transmission */
if(hspi-›Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE)
{
SET_BIT(hspi-›Instance-›CR1, SPI_CR1_CRCNEXT);
}
}
/* Wait until TXE flag is set to send data */
if(SPI_WaitOnFlagUntilTimeout(hspi, SPI_FLAG_TXE, RESET, Timeout) != HAL_OK)
{
SET_BIT(hspi-›ErrorCode, HAL_SPI_ERROR_FLAG);
return HAL_TIMEOUT;
}
/* Wait until Busy flag is reset before disabling SPI */
if(SPI_WaitOnFlagUntilTimeout(hspi, SPI_FLAG_BSY, SET, Timeout) != HAL_OK)
{
SET_BIT(hspi-›ErrorCode, HAL_SPI_ERROR_FLAG);
return HAL_TIMEOUT;
}
/* Clear OVERUN flag in 2 Lines communication mode because received is not read */
if(hspi-›Init.Direction == SPI_DIRECTION_2LINES)
{
__HAL_SPI_CLEAR_OVRFLAG(hspi);
}
hspi-›State = HAL_SPI_STATE_READY;
/* Process Unlocked */
__HAL_UNLOCK(hspi);
return HAL_OK;
}
else
{
return HAL_BUSY;
}
} |
та же самая вещь на сверх-компактном правоверном CMSIS:
Код:
|
void SPI_SendByte(uint8_t byte)
{
while(READ_BIT(SPI1-›SR, SPI_SR_TXE) == 0) { }
SPI1-›DR = byte;
}//---------------------------------------------- |
И ЭТО ВСЁЁЁЁЁ!!!!! ВСЁЁ! КОНКРЕТНЫЙ ДОЛБАНЫЙ ПРИМЕР СРАВНЕНИЯ! ЧИСТО КОНРЕТНА!
Желающие могут добавить таймаут ожидания TXE и выход с возвратом состояния ошибки по истечению таймаута. это буквально три строчки
Последний раз редактировалось Исбанни; 28.06.2018 в 19:11.
|
|
|
|
28.06.2018, 19:07
|
|
Прописка
Регистрация: 05.09.2012
Адрес: Россия, Пермь
Сообщений: 160
Сказал спасибо: 25
Сказали Спасибо 31 раз(а) в 27 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от sat_art
|
При том, что кусок из Хала
|
Если HSI не стартанёт - вам уже и HSE не поможет.
HAL здесь причём?
|
|
|
|
28.06.2018, 19:11
|
|
Прописка
Регистрация: 05.09.2012
Адрес: Россия, Пермь
Сообщений: 160
Сказал спасибо: 25
Сказали Спасибо 31 раз(а) в 27 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от Исбанни
|
Да о чем тут можно говорить?? Этот HAL-овод prinv не разбирается даже в собственном HAL-е!! Он просил "конкретики" - вот ему КОНКРЕТИКА, $#$@, а он даже ни слова не понял из конкретики, а в недоумении выдавил "А причем тут HAL_OK и HAL?" Ну о чем тут можно еще спорить?!
|
Если программер не контролирует возвращаемый результат, то причём тут HAL?
|
|
|
|
28.06.2018, 19:13
|
|
Прописка
Регистрация: 21.04.2018
Сообщений: 174
Сказал спасибо: 1
Сказали Спасибо 66 раз(а) в 53 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
prinv, я кажется КОНКРЕТНО ВЫРАЗИЛСЯ - а что делать с HAL_не_ОКей и почему это происходит? Знаете? Отвечайте предельно конкретно!
А еще выше я привет ПРЕДЕЛЬНО КОНКРЕТНЫЙ пример. Знаете, что это?
Сообщение от prinv
|
Если HSI не стартанёт - вам уже и HSE не поможет.
|
А на чем тогда работает МК? На дровах или угле? и ладно, если есть MSI. Но при неисправности аналоговой части MSI тоже не запустится, а вместе с ним и весь МК тоже.
Последний раз редактировалось Исбанни; 28.06.2018 в 19:19.
|
|
|
|
28.06.2018, 19:17
|
|
Прописка
Регистрация: 05.09.2012
Адрес: Россия, Пермь
Сообщений: 160
Сказал спасибо: 25
Сказали Спасибо 31 раз(а) в 27 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от Исбанни
|
а что делать с HAL_не_ОКей и почему это происходит?
|
Если не HAL_OK - отрабатывай в зависимости от возвращённого кода.
В чём вопрос-то?
Какая разница - HAL, SPL или CMSIS для обработки ошибок? Ошибки или обрабатываются, или на обработку ошибок забивают.
Последний раз редактировалось prinv; 28.06.2018 в 19:20.
|
|
|
|
28.06.2018, 19:22
|
|
Прописка
Регистрация: 05.09.2012
Адрес: Россия, Пермь
Сообщений: 160
Сказал спасибо: 25
Сказали Спасибо 31 раз(а) в 27 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Исбанни, вы бы прекратили уже редактировать сообщения, на которые уже дали ответ
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 17:18.
|
|