Например TDA7294

Форум РадиоКот • Просмотр темы - STM32F103C8+HAL_SPI+Si4432
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 16, 2024 12:35:54

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: STM32F103C8+HAL_SPI+Si4432
СообщениеДобавлено: Вт сен 19, 2017 09:05:27 
Первый раз сказал Мяу!
Аватар пользователя

Зарегистрирован: Ср май 17, 2017 08:34:57
Сообщений: 20
Откуда: Никополь
Рейтинг сообщения: 0
Здравствуйте. :)))
Я немного вот хочу разобраться в вопросе использования модуля на Si4432 посредством библиотек HAL_SPI, т.к. опыта еще в этом не имею... :))
Суть проблемы такова:
Исходя из данных, полученных по этой статье http://wiredlogic.io/ru/diy-radio-si443 ... source-ru/ решил получить в ответ от модуля (по JTAG STlink V2) 06h, сконфигурировав проект в CubeMX потом отредактирвав через Keil, собственно и подключив всё подобающим способом, но в ответ по RadioData только 0xFF. Осциллоскопом рассмотреть побайтно пока возможности нет, но короткие пачки по всем трём линиям увидеть можно.

Далее нашёл статью на mcu.bu и решил собрать по аналогии, но результат тот-же, иногда в ответ приходит 0х01.

Буду рад любой информации, особенно по этой теме. :)))

Вот main.c (по последнему варианту):
Спойлер
Код:
/* Includes ----------*/
#include "main.h"
#include "stm32f1xx_hal.h"

/* USER CODE BEGIN Includes */

/* USER CODE END Includes */

/* Private variables ----------*/
SPI_HandleTypeDef hspi2;

/* USER CODE BEGIN PV */
/* Private variables ----------*/

//float translate(uint16_t result){
//      return result * 0.07;
//}
//float ms(float data){
//   return 0.1F * data;
//}

/* USER CODE END PV */

/* Private function prototypes ----------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_SPI2_Init(void);

/* USER CODE BEGIN PFP */
/* Private function prototypes ----------*/

/* USER CODE END PFP */

/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

int main(void)
{

  /* USER CODE BEGIN 1 */
  uint8_t address = 0;
   uint8_t data = 0;
   //uint8_t data_return[2] = {0};
  /* USER CODE END 1 */

  /* MCU Configuration----------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */
  HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_0);
  HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  HAL_GPIO_WritePin(ON_GPIO_Port, ON_Pin, GPIO_PIN_SET);
   HAL_GPIO_WritePin(NSEL_GPIO_Port, NSEL_Pin, GPIO_PIN_SET);   
   MX_SPI2_Init();

  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
  /* USER CODE END WHILE */
  HAL_GPIO_WritePin(ON_GPIO_Port, ON_Pin, GPIO_PIN_RESET);
  HAL_GPIO_WritePin(NSEL_GPIO_Port, NSEL_Pin, GPIO_PIN_RESET);
   address = 0x01;   //whoami
   HAL_SPI_TransmitReceive(&hspi2, &address, &data, sizeof(data), 0x1000);
   HAL_GPIO_WritePin(NSEL_GPIO_Port, NSEL_Pin, GPIO_PIN_SET);
   HAL_GPIO_WritePin(ON_GPIO_Port, ON_Pin, GPIO_PIN_SET);
   HAL_Delay (1000);
  /* USER CODE BEGIN 3 */

  }
  /* USER CODE END 3 */

}

/** System Clock Configuration
*/
void SystemClock_Config(void)
{

  RCC_OscInitTypeDef RCC_OscInitStruct;
  RCC_ClkInitTypeDef RCC_ClkInitStruct;

    /**Initializes the CPU, AHB and APB busses clocks
    */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

    /**Initializes the CPU, AHB and APB busses clocks
    */
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

    /**Configure the Systick interrupt time
    */
  HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);

    /**Configure the Systick
    */
  HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

  /* SysTick_IRQn interrupt configuration */
  HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
}

/* SPI2 init function */
static void MX_SPI2_Init(void)
{

  hspi2.Instance = SPI2;
  hspi2.Init.Mode = SPI_MODE_MASTER;
  hspi2.Init.Direction = SPI_DIRECTION_2LINES;
  hspi2.Init.DataSize = SPI_DATASIZE_8BIT;
  hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;
  hspi2.Init.CLKPhase = SPI_PHASE_1EDGE;
  hspi2.Init.NSS = SPI_NSS_SOFT;
  hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256;
  hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
  hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
  hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  hspi2.Init.CRCPolynomial = 10;
  if (HAL_SPI_Init(&hspi2) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

}

/** Configure pins as
        * Analog
        * Input
        * Output
        * EVENT_OUT
        * EXTI
*/
static void MX_GPIO_Init(void)
{

  GPIO_InitTypeDef GPIO_InitStruct;

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOC_CLK_ENABLE();
  __HAL_RCC_GPIOD_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(ON_GPIO_Port, ON_Pin, GPIO_PIN_RESET);

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(NSEL_GPIO_Port, NSEL_Pin, GPIO_PIN_RESET);

  /*Configure GPIO pin : ON_Pin */
  GPIO_InitStruct.Pin = ON_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(ON_GPIO_Port, &GPIO_InitStruct);

  /*Configure GPIO pin : NSEL_Pin */
  GPIO_InitStruct.Pin = NSEL_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(NSEL_GPIO_Port, &GPIO_InitStruct);

}

/* USER CODE BEGIN 4 */

/* USER CODE END 4 */

/**
  * @brief  This function is executed in case of error occurrence.
  * @param  None
  * @retval None
  */
void _Error_Handler(char * file, int line)
{
  /* USER CODE BEGIN Error_Handler_Debug */
  /* User can add his own implementation to report the HAL error return state */
  while(1)
  {
  }
  /* USER CODE END Error_Handler_Debug */
}

#ifdef USE_FULL_ASSERT

/**
   * @brief Reports the name of the source file and the source line number
   * where the assert_param error has occurred.
   * @param file: pointer to the source file name
   * @param line: assert_param error line source number
   * @retval None
   */
void assert_failed(uint8_t* file, uint32_t line)
{
  /* USER CODE BEGIN 6 */
  /* User can add his own implementation to report the file name and line number,
    ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  /* USER CODE END 6 */

}

#endif

/**
  * @}
  */

/**
  * @}
*/

/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

Для информации - пин ON - PC13 (LED) - чисто мигает;
пин NSEL - PA4 (СS) реализован программно.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32F103C8+HAL_SPI+Si4432
СообщениеДобавлено: Сб сен 23, 2017 11:35:40 
Первый раз сказал Мяу!
Аватар пользователя

Зарегистрирован: Ср май 17, 2017 08:34:57
Сообщений: 20
Откуда: Никополь
Рейтинг сообщения: 0
Немножко поразбиравшись в вопросе, осциллоскопом обнаружил, что данные по MOSI в соответствии с SCLK посылаются правильно, а линия CS или NSEL отрабатывает гораздо быстрее, чем цикл передачи данных по SPI
Почитав даташит, процесс инициализации модуля сделал "по святцам", но упёрся в одну особенность после отправки данных нужно обязательно подтвердить её завершение, а уж потом переводить ногу NSEL в высокое состояние. В связи с этим и посыпались вопросы о реализации.
Наткнулся на статью, где описано использование DMA, но т.к. статья имеет довольно мало подробностей, то сделать что-то работающее из этого у меня не вышло, как я делал:
В main.c:
Код:
дополнительно добавил гл.перем.:
int TXcomplete = 0;
int RXcomplete = 0;
--далее пропускаем всякую лабуду---
TXcomplete =0;
HAL_SPI_Transmit_DMA(&hspi1; &addreess; 1)
while (TXcomplete ==1);
ну и т.д.

В файле stm32f1xx_it.c соответственно по примеру
Код:
extern int TXcomplete;
extern int RXcomplete;
----------
void DMA2_Stream3_IRQHandler(void)
{
  /* USER CODE BEGIN DMA2_Stream3_IRQn 0 */
  TXcomplete = 1;
  /* USER CODE END DMA2_Stream3_IRQn 0 */
 
  HAL_DMA_IRQHandler(&hdma_spi1_tx);

Естественно TXcomplete не становится равной 1. Потому что, я всё делаю не так, а как надо - не знаю.

Пробовал другой вариант, нашёл в электронной литературе по HAL для STM32F1xx функцию HAL_SPI_TX_Cplt() (написал по памяти), которую вроде бы как нужно вызвать для подтверждения передачи, но вызывая её попадаю на код UNUSED в теле void HAL_SPI_TX_Cplt () в файле драйвера hal spi.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32F103C8+HAL_SPI+Si4432
СообщениеДобавлено: Вт сен 26, 2017 10:34:34 
Первый раз сказал Мяу!
Аватар пользователя

Зарегистрирован: Ср май 17, 2017 08:34:57
Сообщений: 20
Откуда: Никополь
Рейтинг сообщения: 0
Продолжаем монолог, вот, собственно поступил вот так:
Код main.c:
Спойлер
Код:
/**
  ******************************************************************************
  * File Name          : main.c
  * Description        : Main program body
  ******************************************************************************
  ** This notice applies to any and all portions of this file
  * that are not between comment pairs USER CODE BEGIN and
  * USER CODE END. Other portions of this file, whether
  * inserted by the user or by software development tools
  * are owned by their respective copyright owners.
  *
  * COPYRIGHT(c) 2017 STMicroelectronics
  *
  * Redistribution and use in source and binary forms, with or without modification,
  * are permitted provided that the following conditions are met:
  *   1. Redistributions of source code must retain the above copyright notice,
  *      this list of conditions and the following disclaimer.
  *   2. Redistributions in binary form must reproduce the above copyright notice,
  *      this list of conditions and the following disclaimer in the documentation
  *      and/or other materials provided with the distribution.
  *   3. Neither the name of STMicroelectronics nor the names of its contributors
  *      may be used to endorse or promote products derived from this software
  *      without specific prior written permission.
  *
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
  ******************************************************************************
  */
/* Includes ----------*/
#include "main.h"
#include "stm32f1xx_hal.h"

/* USER CODE BEGIN Includes */

/* USER CODE END Includes */

/* Private variables ----------*/
SPI_HandleTypeDef hspi1;
DMA_HandleTypeDef hdma_spi1_tx;
DMA_HandleTypeDef hdma_spi1_rx;

/* USER CODE BEGIN PV */
uint8_t address = 0;
uint8_t address1 = 0;
uint8_t data = 0;
uint8_t Int1 = 0;
uint8_t Int2 = 0;
uint8_t TXcomplete = 0;
uint8_t TXRXcomplete = 0;
/* Private variables ----------*/

/* USER CODE END PV */

/* Private function prototypes ----------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_DMA_Init(void);
static void MX_SPI1_Init(void);

/* USER CODE BEGIN PFP */
/* Private function prototypes ----------*/

/* USER CODE END PFP */

/* USER CODE BEGIN 0 */

void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi)
{
   if (hspi->Instance == hspi1.Instance) {
   TXcomplete = 1;
   }
}

void HAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef *hspi)
{
   if (hspi->Instance == hspi1.Instance) {
   TXRXcomplete = 1;
   }
}

  void Write (uint8_t address, uint8_t data)
{
   address1 = (address|0x80);
   HAL_GPIO_WritePin(NSEL_GPIO_Port, NSEL_Pin, GPIO_PIN_RESET);
   TXcomplete = 0;
   HAL_SPI_Transmit_IT(&hspi1, &address1, 1);
   while (TXcomplete == 0);
   TXcomplete = 0;
   HAL_SPI_Transmit_IT(&hspi1, &data, 1);
   while (TXcomplete == 0);
   TXcomplete = 0;
   HAL_GPIO_WritePin(NSEL_GPIO_Port, NSEL_Pin, GPIO_PIN_SET);
   HAL_Delay (10);
}
   
   uint8_t Read (uint8_t address)
{
   HAL_GPIO_WritePin(NSEL_GPIO_Port, NSEL_Pin, GPIO_PIN_RESET);
   TXRXcomplete = 0;
   HAL_SPI_TransmitReceive_IT(&hspi1, &address, &data, 1);
   while (TXRXcomplete == 0);
   TXRXcomplete = 0;
   HAL_GPIO_WritePin(NSEL_GPIO_Port, NSEL_Pin, GPIO_PIN_SET);
   HAL_Delay (10);
   return data;
}

  void SI4432_Init()
{
  HAL_GPIO_WritePin(SDN_GPIO_Port, SDN_Pin, GPIO_PIN_RESET);
   HAL_Delay (200);
   Read (0x00);
   Read (0x01);
  Read (0x02);   
   Int1 = Read (0x03);
   Int2 = Read (0x04);
   Write (0x07, 0x80);
   while (HAL_GPIO_ReadPin(NIRQ_GPIO_Port, NIRQ_Pin) == 1);
   Int1 = Read (0x03);
   Int2 = Read (0x04);
   HAL_Delay (1);
}

/* USER CODE END 0 */

int main(void)
{

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration----------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_DMA_Init();
  MX_SPI1_Init();

  /* USER CODE BEGIN 2 */
  //SI4432_Init();
      
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */
  SI4432_Init();
   
  }
  /* USER CODE END 3 */

}

/** System Clock Configuration
*/
void SystemClock_Config(void)
{

  RCC_OscInitTypeDef RCC_OscInitStruct;
  RCC_ClkInitTypeDef RCC_ClkInitStruct;

    /**Initializes the CPU, AHB and APB busses clocks
    */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

    /**Initializes the CPU, AHB and APB busses clocks
    */
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

    /**Configure the Systick interrupt time
    */
  HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);

    /**Configure the Systick
    */
  HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

  /* SysTick_IRQn interrupt configuration */
  HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
}

/* SPI1 init function */
static void MX_SPI1_Init(void)
{

  hspi1.Instance = SPI1;
  hspi1.Init.Mode = SPI_MODE_MASTER;
  hspi1.Init.Direction = SPI_DIRECTION_2LINES;
  hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
  hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
  hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
  hspi1.Init.NSS = SPI_NSS_SOFT;
  hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256;
  hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
  hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
  hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  hspi1.Init.CRCPolynomial = 10;
  if (HAL_SPI_Init(&hspi1) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

}

/**
  * Enable DMA controller clock
  */
static void MX_DMA_Init(void)
{
  /* DMA controller clock enable */
  __HAL_RCC_DMA1_CLK_ENABLE();

  /* DMA interrupt init */
  /* DMA1_Channel2_IRQn interrupt configuration */
  HAL_NVIC_SetPriority(DMA1_Channel2_IRQn, 0, 0);
  HAL_NVIC_EnableIRQ(DMA1_Channel2_IRQn);
  /* DMA1_Channel3_IRQn interrupt configuration */
  HAL_NVIC_SetPriority(DMA1_Channel3_IRQn, 0, 0);
  HAL_NVIC_EnableIRQ(DMA1_Channel3_IRQn);

}

/** Configure pins as
        * Analog
        * Input
        * Output
        * EVENT_OUT
        * EXTI
*/
static void MX_GPIO_Init(void)
{

  GPIO_InitTypeDef GPIO_InitStruct;

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOC_CLK_ENABLE();
  __HAL_RCC_GPIOD_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(SDN_GPIO_Port, SDN_Pin, GPIO_PIN_RESET);

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(NSEL_GPIO_Port, NSEL_Pin, GPIO_PIN_RESET);

  /*Configure GPIO pin : SDN_Pin */
  GPIO_InitStruct.Pin = SDN_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(SDN_GPIO_Port, &GPIO_InitStruct);

  /*Configure GPIO pin : NIRQ_Pin */
  GPIO_InitStruct.Pin = NIRQ_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(NIRQ_GPIO_Port, &GPIO_InitStruct);

  /*Configure GPIO pin : NSEL_Pin */
  GPIO_InitStruct.Pin = NSEL_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(NSEL_GPIO_Port, &GPIO_InitStruct);

}

/* USER CODE BEGIN 4 */

/* USER CODE END 4 */

/**
  * @brief  This function is executed in case of error occurrence.
  * @param  None
  * @retval None
  */
void _Error_Handler(char * file, int line)
{
  /* USER CODE BEGIN Error_Handler_Debug */
  /* User can add his own implementation to report the HAL error return state */
  while(1)
  {
  }
  /* USER CODE END Error_Handler_Debug */
}

#ifdef USE_FULL_ASSERT

/**
   * @brief Reports the name of the source file and the source line number
   * where the assert_param error has occurred.
   * @param file: pointer to the source file name
   * @param line: assert_param error line source number
   * @retval None
   */
void assert_failed(uint8_t* file, uint32_t line)
{
  /* USER CODE BEGIN 6 */
  /* User can add his own implementation to report the file name and line number,
    ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  /* USER CODE END 6 */

}

#endif

/**
  * @}
  */

/**
  * @}
*/

/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/


Но после
Код:
HAL_SPI_TransmitReceive_IT(&hspi1, &address, &data, 1);

зацикливается на первом же
Код:
while (TXRXcomplete == 0);
.
И, что примечтаельно, если использовать
Код:
HAL_SPI_Transmit_IT(&hspi1, &address, 1);
while (TXcomplete == 0);

то фокус проходит, прерывание по завершению передачи проходит, но, естетсвенно, нет чтения
Если после transmit сделать так:
Код:
HAL_SPI_Receive_IT(&hspi1, &address, 1);
while (RXcomplete == 0);

, то фокус уже не проходит.
Радиомодуль уже запаял другой, ошибок в линиях связи нет, как собственно и чтения регистров. :)))
И да, если по линии MOSI и SCLK можно наблюдать нормальные соответствующие адресу прямоугольники, то на MISO творится какая-то непонятная хренотень не очень напоминающая сигнал SPI.


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: STM32F103C8+HAL_SPI+Si4432
СообщениеДобавлено: Ср сен 27, 2017 14:20:51 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 155
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 0
Вы не пробовали читать документацию, вместо слепого тыканья в калокубе?

viewtopic.php?f=59&t=67578&p=3119148&hilit=%D0%96%D0%B4%D0%B5%D0%BC+%D1%84%D0%BB%D0%B0%D0%B3+RXNE#p3119148


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: STM32F103C8+HAL_SPI+Si4432
СообщениеДобавлено: Чт сен 28, 2017 12:45:40 
Первый раз сказал Мяу!
Аватар пользователя

Зарегистрирован: Ср май 17, 2017 08:34:57
Сообщений: 20
Откуда: Никополь
Рейтинг сообщения: 0
Возможно порой были тыканья и бездумными, но старался привести всё в рабочее состояние, порой экспериментировал, но зачастую делал так, как оно должно быть (я так думаю).
Есть один нюанс - замечательная функция в HAL, а именно HAL_SPI_TransmitReceive, блокирующая функция, в принципе этого и достаточно для чисто проверки работоспособности модуля, её в основном в пример и ставят, как это делалось по ссылке из первого поста, достаточно поставить перед функцией NSEL в ноль, а после в 1. И NSEL действительно отрабатывает как положено.
Код:
всё это в while
HAL_GPIO_WritePin(ON_GPIO_Port, ON_Pin, GPIO_PIN_RESET); // SDN опускаем в ноль;
HAL_Delay (15); //ждём 15мс - по документации;
HAL_GPIO_WritePin(NSEL_GPIO_Port, NSEL_Pin, GPIO_PIN_RESET); // NSEL в ноль;
address = 0x01;
HAL_SPI_TransmitReceive (&hspi1, &address, &data2, 1, 1000); //передаём адрес;
address = 0x00;
HAL_SPI_TransmitReceive (&hspi1, &address, &data2, 1, 1000); //передаём данные (нули) и здесь должны получить в ответ в data2;
HAL_GPIO_WritePin(NSEL_GPIO_Port, NSEL_Pin, GPIO_PIN_SET); //поднимаем NSEL;
HAL_Delay (1);
HAL_GPIO_WritePin(ON_GPIO_Port, ON_Pin, GPIO_PIN_SET); //переводим в SHUTDOWN;
HAL_Delay (1);


Как выглядит дело визуально (логического анализатора пока нет, пока...) один из каналов осциллографа немного не настроен, но сути не меняет.

Сигнал MOSI относительно синхронизации по SCK:
Изображение

Сигнал MISO относительно синхронизации по SCK (как видно - даже не колышется):
Изображение

Сигнал NSEL:
Изображение

А вот, собственно, инфо из даташита:
Изображение

Возможно сказывается временной промежуток между пачками тактирующего сигнала, в таком случае можно передавать сразу 16 бит данных, но как в эти 16 бит увязать для передачи двух переменных адреса и данных еще не знаю...
Модуль уже третий из 4-х, да и плату с STM32 уже другую взял.
Подключение:

На плате МК ------- На модуле
PA7 (MOSI) -------- SDI
PA6 (MISO) -------- SDO
PA5 (SCK) -------- SCLK
PA4 (SS) -------- NSEL
PB0 (ON_Pin)-------- SDN
3V3 -------- VDD
ну и GND само собой.


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: STM32F103C8+HAL_SPI+Si4432
СообщениеДобавлено: Чт сен 28, 2017 12:57:53 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 155
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 1
Прочтите внимательно. https://electronix.ru/forum/index.php?showtopic=135896
И обратите внимание -насколько проще делается без кала...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32F103C8+HAL_SPI+Si4432
СообщениеДобавлено: Чт сен 28, 2017 14:20:24 
Первый раз сказал Мяу!
Аватар пользователя

Зарегистрирован: Ср май 17, 2017 08:34:57
Сообщений: 20
Откуда: Никополь
Рейтинг сообщения: 0
Вроде бы и внимательно читал, всё соответствует рабочей конфигурации, как Ваш пример, так и мои примеры... Хоть и медленно, но ехать то как-то должно... Мисо молчит и никаких признаков жизни, единственное - если SDN физически отключить, на MISO появляются какие-то помехи, не очень похожие на полноценные единицы в момент работы SCK. И как-то вот хоронить весь КА HAL из-за такой ситуации не очень нравится, хочется уж точно разобраться в проблеме... Да и в чём, собственно вина HALа -то?, осциллограммы показывают, что посылается равным счетом то, что и хотелось. Если уж здесь есть какие проблемы со стороны драйвера хала, то без проблем, возьмём другой вектор направления.. А пока что внутренний голос намекает на мои косяки или на нерабочие модули...
И да, как у опытного специалиста хочу спросить: вот эти промежутки между пакетами SCK могут как-то влиять на происходящее?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32F103C8+HAL_SPI+Si4432
СообщениеДобавлено: Чт сен 28, 2017 14:36:49 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 155
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 0
Мисо ЭТО ВХОД


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32F103C8+HAL_SPI+Si4432
СообщениеДобавлено: Чт сен 28, 2017 16:00:03 
Первый раз сказал Мяу!
Аватар пользователя

Зарегистрирован: Ср май 17, 2017 08:34:57
Сообщений: 20
Откуда: Никополь
Рейтинг сообщения: 0
dosikus писал(а):
Мисо ЭТО ВХОД

Ну да, вход, подключенный к выходу слейва SDO.
На этом этапе, наверное стоит посмотреть в сторону других проверенных spi устройств, ничего правда под руку не попадается, кроме spi flash...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32F103C8+HAL_SPI+Si4432
СообщениеДобавлено: Чт сен 28, 2017 20:45:26 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 155
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: -1
Если вы все же перейдете на нормальный кодинг, я смогу вам предоставить и помощь и ответы на интересующие вас вопросы.
Поймите ни с калокубом ни с SPL у вас ничего не выйдет это раз. И помогать вам никто не сможет.
Все приверженцы г.либ слепы как кроты.
А у меня нет никакого желания толкать вас на путь аурдуньи...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32F103C8+HAL_SPI+Si4432
СообщениеДобавлено: Пт сен 29, 2017 09:04:35 
Первый раз сказал Мяу!
Аватар пользователя

Зарегистрирован: Ср май 17, 2017 08:34:57
Сообщений: 20
Откуда: Никополь
Рейтинг сообщения: 0
:)) Наверное Вы правы. Это вот очень похоже на мою проблему. Последний коммент автора окончательно хоронит мои радужные представления о CubeMX, для автора всё превосходно, для меня же - мрак. :facepalm:


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: Юрий48 и гости: 15


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y