Closed rimen05 closed 1 year ago
Hey mate, no external logic converters are needed 👍
Great. I wonder how you achieve that. Do you setup it in the "main.c" file? For your info, I am trying to adapt this library to the bluepill's MCU (stm32f103). Best Regards,
Yea you would do something like this in your main.c file:
#include "sdi12.h"
// This is just the normal setup of a UART
// See the MX_UART1_UART_Init method below for settings
UART_HandleTypeDef huart1;
static void MX_USART1_UART_Init(void);
int main(void) {
HAL_Init();
SystemClock_Config();
MX_USART1_UART_Init();
SDI12_Init(&huart1);
// Buffer to hold data returned from sensor
char data[64] = {0};
char addr = '0'; // SDI-12 address
while(1) {
SDI12_Measure_TypeDef measurement_info;
memset(data, 0, sizeof(data));
SDI12_StartMeasurement(addr, &measurement_info);
HAL_Delay(measurement_info.Time * 1000);
SDI12_SendData(addr, &measurement_info, data);
HAL_Delay(10000);
}
}
// This is your UART implementation auto-generated by STM32CubeMX
// Take note of the TX on startup setup at the bottom (this is non-standard so you need to add this)
static void MX_USART1_UART_Init(void) {
/* USER CODE BEGIN USART1_Init 0 */
/* USER CODE END USART1_Init 0 */
/* USER CODE BEGIN USART1_Init 1 */
/* USER CODE END USART1_Init 1 */
huart1.Instance = USART1;
huart1.Init.BaudRate = 1200;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_EVEN;
huart1.Init.Mode = UART_MODE_TX_RX;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_TXINVERT_INIT|UART_ADVFEATURE_RXINVERT_INIT
|UART_ADVFEATURE_SWAP_INIT;
huart1.AdvancedInit.TxPinLevelInvert = UART_ADVFEATURE_TXINV_ENABLE;
huart1.AdvancedInit.RxPinLevelInvert = UART_ADVFEATURE_RXINV_ENABLE;
huart1.AdvancedInit.Swap = UART_ADVFEATURE_SWAP_ENABLE;
if (HAL_UART_Init(&huart1) != HAL_OK) {
Error_Handler();
}
/* USER CODE BEGIN USART1_Init 2 */
// Keep TX as the transmit pin on startup
huart1.AdvancedInit.Swap = UART_ADVFEATURE_SWAP_DISABLE;
if (HAL_UART_Init(&huart1) != HAL_OK) {
Error_Handler();
}
/* USER CODE END USART1_Init 2 */
}
Thank you very much!
Hi Harvey.
First of all, thank you very much for sharing your library.
That said, since the SDI12 protocol is an inverted logic one, I was wondering whether the library requires external logic inverters.
Thank you very much for your answer.