Skip to main content
Seth1er
Associate III
February 7, 2021
Question

nucleo L476RG and AD9834

  • February 7, 2021
  • 4 replies
  • 5868 views

hello,

I try to use the AD9834 with the nucleo L476RG and I have some issue.

I use Spi 1 , send that I think good, but it's not work.

here are my code, I hope someone can help.

thanks and sorry for my english

int PINSW = 1;
 
//int led = GPIO_PIN_5;
int AD_reset = GPIO_PIN_15;
int AD_SDA = GPIO_PIN_14;
int AD_SLK = GPIO_PIN_13;
int AD_FSY = GPIO_PIN_12;
int AD_CSK = GPIO_PIN_5;
 
uint8_t spitx[2];
 
void AD9834_Reset(int value){
 if(PINSW){
 if(value) HAL_GPIO_WritePin(GPIOB, AD_reset,1);
 else HAL_GPIO_WritePin(GPIOB, AD_reset,0);
 }else{
 if(value) AD9834_CONTROL |= 0x0100;
 else AD9834_CONTROL &= ~0x0100;
 //AD9834_SendWord(AD9834_CONTROL);
 }
}
 
 
 
 
 
 
 
 /* Initialize all configured peripherals */
 MX_GPIO_Init();
 MX_USART2_UART_Init();
 MX_SPI2_Init();
 MX_SPI1_Init();
 /* USER CODE BEGIN 2 */
 HAL_GPIO_WritePin(GPIOB, AD_FSY, 1);
 //AD9834_Reset(0);
 HAL_Delay(2000);
 //AD9834_Reset(1);
 
 HAL_GPIO_WritePin(GPIOB, AD_FSY, 0);
 HAL_Delay(100);
 
 spitx[0]=0x00;
 spitx[1]=0x21;
 HAL_SPI_Transmit(&hspi1, spitx, 1, 100);
 
 HAL_Delay(100);
 HAL_GPIO_WritePin(GPIOB, AD_FSY, 1);
 HAL_Delay(100);
 HAL_GPIO_WritePin(GPIOB, AD_FSY, 0);
 HAL_Delay(100);
 
 spitx[0]=0xC7;
 spitx[1]=0x50;
 HAL_SPI_Transmit(&hspi1, spitx, 1, 100);
 
 HAL_Delay(100);
 HAL_GPIO_WritePin(GPIOB, AD_FSY, 1);
 HAL_Delay(100);
 HAL_GPIO_WritePin(GPIOB, AD_FSY, 0);
 HAL_Delay(100);
 
 //freq
 spitx[0]=0xFB;
 spitx[1]=0x0E;
 HAL_SPI_Transmit(&hspi1, spitx, 1, 100);
 
 HAL_Delay(100);
 HAL_GPIO_WritePin(GPIOB, AD_FSY, 1);
 HAL_Delay(100);
 HAL_GPIO_WritePin(GPIOB, AD_FSY, 0);
 HAL_Delay(100);
 
 spitx[0]=0x00;
 spitx[1]=0x40;
 HAL_SPI_Transmit(&hspi1, spitx, 1, 100);
 
 HAL_Delay(100);
 HAL_GPIO_WritePin(GPIOB, AD_FSY, 1);
 HAL_Delay(100);
 HAL_GPIO_WritePin(GPIOB, AD_FSY, 0);
 HAL_Delay(100);
 
 spitx[0]=0x00;
 spitx[1]=0x00;
 HAL_SPI_Transmit(&hspi1, spitx, 1, 100);
 
 HAL_Delay(100);
 HAL_GPIO_WritePin(GPIOB, AD_FSY, 1);
 HAL_Delay(100);
 HAL_GPIO_WritePin(GPIOB, AD_FSY, 0);
 HAL_Delay(100);
 
 spitx[0]=0x00;
 spitx[1]=0xC0;
 HAL_SPI_Transmit(&hspi1, spitx, 1, 100);
 
 HAL_Delay(100);
 HAL_GPIO_WritePin(GPIOB, AD_FSY, 1);
 HAL_Delay(100);
 HAL_GPIO_WritePin(GPIOB, AD_FSY, 0);
 HAL_Delay(100);
 
 spitx[0]=0x00;
 spitx[1]=0x00;
 HAL_SPI_Transmit(&hspi1, spitx, 1, 100);
 
 HAL_Delay(100);
 HAL_GPIO_WritePin(GPIOB, AD_FSY, 1);
 HAL_Delay(100);
 HAL_GPIO_WritePin(GPIOB, AD_FSY, 0);
 HAL_Delay(100);
 
 spitx[0]=0x00;
 spitx[1]=0x20;
 HAL_SPI_Transmit(&hspi1, spitx, 1, 100);
 
 HAL_Delay(100);
 HAL_GPIO_WritePin(GPIOB, AD_FSY, 1);
 
 
 
 
 
 /* USER CODE END 2 */
 
 /* Infinite loop */
 /* USER CODE BEGIN WHILE */
 while (1)
 {
 
 //HAL_GPIO_TogglePin(GPIOA, led);
 // HAL_GPIO_TogglePin(GPIOB, AD_FSY);
	 //spitx[1]=0x00;
	 //HAL_SPI_Transmit(&hspi1, spitx, 1, 100);
 // HAL_Delay(2000);
 /* USER CODE END WHILE */
 
 /* USER CODE BEGIN 3 */
 }
 /* USER CODE END 3 */
}
 
/**
 * @brief System Clock Configuration
 * @retval None
 */
void SystemClock_Config(void)
{
 RCC_OscInitTypeDef RCC_OscInitStruct = {0};
 RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
 RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
 
 /** Initializes the RCC Oscillators according to the specified parameters
 * in the RCC_OscInitTypeDef structure.
 */
 RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
 RCC_OscInitStruct.HSIState = RCC_HSI_ON;
 RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
 RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
 RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
 RCC_OscInitStruct.PLL.PLLM = 1;
 RCC_OscInitStruct.PLL.PLLN = 10;
 RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV7;
 RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;
 RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;
 if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
 {
 Error_Handler();
 }
 /** Initializes the CPU, AHB and APB buses 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_DIV1;
 RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
 
 if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK)
 {
 Error_Handler();
 }
 PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART2;
 PeriphClkInit.Usart2ClockSelection = RCC_USART2CLKSOURCE_PCLK1;
 if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
 {
 Error_Handler();
 }
 /** Configure the main internal regulator output voltage
 */
 if (HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1) != HAL_OK)
 {
 Error_Handler();
 }
}
 
/**
 * @brief SPI1 Initialization Function
 * @param None
 * @retval None
 */
static void MX_SPI1_Init(void)
{
 
 /* USER CODE BEGIN SPI1_Init 0 */
 
 /* USER CODE END SPI1_Init 0 */
 
 /* USER CODE BEGIN SPI1_Init 1 */
 
 /* USER CODE END SPI1_Init 1 */
 /* SPI1 parameter configuration*/
 hspi1.Instance = SPI1;
 hspi1.Init.Mode = SPI_MODE_MASTER;
 hspi1.Init.Direction = SPI_DIRECTION_2LINES;
 hspi1.Init.DataSize = SPI_DATASIZE_16BIT;
 hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
 hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
 hspi1.Init.NSS = SPI_NSS_SOFT;
 hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32;
 hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
 hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
 hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
 hspi1.Init.CRCPolynomial = 7;
 hspi1.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
 hspi1.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
 if (HAL_SPI_Init(&hspi1) != HAL_OK)
 {
 Error_Handler();
 }
 /* USER CODE BEGIN SPI1_Init 2 */
 
 /* USER CODE END SPI1_Init 2 */
 
}
 
/**
 * @brief SPI2 Initialization Function
 * @param None
 * @retval None
 */
static void MX_SPI2_Init(void)
{
 
 /* USER CODE BEGIN SPI2_Init 0 */
 
 /* USER CODE END SPI2_Init 0 */
 
 /* USER CODE BEGIN SPI2_Init 1 */
 
 /* USER CODE END SPI2_Init 1 */
 /* SPI2 parameter configuration*/
 hspi2.Instance = SPI2;
 hspi2.Init.Mode = SPI_MODE_MASTER;
 hspi2.Init.Direction = SPI_DIRECTION_2LINES;
 hspi2.Init.DataSize = SPI_DATASIZE_16BIT;
 hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;
 hspi2.Init.CLKPhase = SPI_PHASE_1EDGE;
 hspi2.Init.NSS = SPI_NSS_SOFT;
 hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
 hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
 hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
 hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
 hspi2.Init.CRCPolynomial = 7;
 hspi2.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
 hspi2.Init.NSSPMode = SPI_NSS_PULSE_DISABLE;
 if (HAL_SPI_Init(&hspi2) != HAL_OK)
 {
 Error_Handler();
 }
 /* USER CODE BEGIN SPI2_Init 2 */
 
 /* USER CODE END SPI2_Init 2 */
 
}
 
/**
 * @brief USART2 Initialization Function
 * @param None
 * @retval None
 */
static void MX_USART2_UART_Init(void)
{
 
 /* USER CODE BEGIN USART2_Init 0 */
 
 /* USER CODE END USART2_Init 0 */
 
 /* USER CODE BEGIN USART2_Init 1 */
 
 /* USER CODE END USART2_Init 1 */
 huart2.Instance = USART2;
 huart2.Init.BaudRate = 115200;
 huart2.Init.WordLength = UART_WORDLENGTH_8B;
 huart2.Init.StopBits = UART_STOPBITS_1;
 huart2.Init.Parity = UART_PARITY_NONE;
 huart2.Init.Mode = UART_MODE_TX_RX;
 huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
 huart2.Init.OverSampling = UART_OVERSAMPLING_16;
 huart2.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
 huart2.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
 if (HAL_UART_Init(&huart2) != HAL_OK)
 {
 Error_Handler();
 }
 /* USER CODE BEGIN USART2_Init 2 */
 
 /* USER CODE END USART2_Init 2 */
 
}
 
/**
 * @brief GPIO Initialization Function
 * @param None
 * @retval None
 */
static void MX_GPIO_Init(void)
{
 GPIO_InitTypeDef GPIO_InitStruct = {0};
 
 /* GPIO Ports Clock Enable */
 __HAL_RCC_GPIOC_CLK_ENABLE();
 __HAL_RCC_GPIOH_CLK_ENABLE();
 __HAL_RCC_GPIOA_CLK_ENABLE();
 __HAL_RCC_GPIOB_CLK_ENABLE();
 
 /*Configure GPIO pin Output Level */
 HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET);
 
 /*Configure GPIO pin Output Level */
 HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15, GPIO_PIN_RESET);
 
 /*Configure GPIO pin : B1_Pin */
 GPIO_InitStruct.Pin = B1_Pin;
 GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
 GPIO_InitStruct.Pull = GPIO_NOPULL;
 HAL_GPIO_Init(B1_GPIO_Port, &GPIO_InitStruct);

This topic has been closed for replies.

4 replies

Seth1er
Seth1erAuthor
Associate III
February 7, 2021

o

Technical Moderator
February 9, 2021

Hello @Seth1er​  and welcome to the STM32 Community :smiling_face_with_smiling_eyes: ,

Please share your ioc file and more details to help you solve your issue :

Which version of CubeL4 and CubeMx are you using ?

In the debug, where the code hangs/stop ? Do you get an error message ?  

Imen

In order to give better visibility on the answered topics, please click on 'Best answer' on the reply which solved your issue or answered your question. Thanks
Seth1er
Seth1erAuthor
Associate III
February 9, 2021

hello,

here are the ioc file.

cubeide version :

Version: 1.5.1

Build: 9029_20201210_1234 (UTC)

I don't know what is CubeL4 sorry. if it's the nucle version, i don't know how to check.

In fact I don't have any arror message. the code is load, I send some data on the SPI to the AD9834 but I don't have any signal.

after some try I have one success, with code below( with luck) I have a 6,25MHz signal. I don't understand why, because it doesn't correspond to the 9834 formula.

If I try an other value, I don't have any signal.

I don't know if it's an SPI issue, a sequence issue .

I don't found any exemple on net between SMT32 and AD9834. a lot with arduino, but all exemple don't use the SPI, they make they own one.

I hope someone can help me. it seem to be easy but i can't .

The AD9834 is on a "eval" board with the clk inside a 75MHz.

BR,

 HAL_GPIO_WritePin(GPIOB, AD_FSY, 0);

  HAL_Delay(100);

  spitx[0]=0x00;

  spitx[1]=0x21;

  HAL_SPI_Transmit(&hspi1, spitx, 1, 100);

  HAL_Delay(100);

  HAL_GPIO_WritePin(GPIOB, AD_FSY, 1);

  HAL_Delay(100);

  HAL_GPIO_WritePin(GPIOB, AD_FSY, 0);

  HAL_Delay(100);

  spitx[0]=0xC7;

  spitx[1]=0x50;

  HAL_SPI_Transmit(&hspi1, spitx, 1, 100);

  HAL_Delay(100);

  HAL_GPIO_WritePin(GPIOB, AD_FSY, 1);

  HAL_Delay(100);

  HAL_GPIO_WritePin(GPIOB, AD_FSY, 0);

  HAL_Delay(100);

  //freq

  spitx[0]=0xFB;

  spitx[1]=0x0E;

  HAL_SPI_Transmit(&hspi1, spitx, 1, 100);

  HAL_Delay(100);

  HAL_GPIO_WritePin(GPIOB, AD_FSY, 1);

Seth1er
Seth1erAuthor
Associate III
February 10, 2021

just a up,

if someone can help me on this please. or give me a simple code to set a freq with STM32 and AD9834, I will understand

BR