2024-05-15 06:38 AM - edited 2024-05-15 06:58 AM
Hi All,
I have been a little confused about my code and would appreciate some help greatly...
I have a basic program where I would like to read the ADC values from a sensor, and transmit them via UART for later signal processing and whatnot.
The structure is simple, and when I tested out reading the values from the ADC, as well as sending strings via UART - they both work perfectly fine. But now when I merge the two, the UART does not work anymore... I do not see anything in my serial monitor (Putty)
I feel like I am missing something big, but cannot find it. I would appreciate it if someone pointed me in the right direction :)
in my main, I have:
uint32_t value[2]; // start adc in DMA mode
int isSent = 1;
uint8_t tx_buffer[] = "Welcome to BinaryUpdates!\n\r";
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_DMA_Init();
MX_ADC1_Init();
MX_TIM3_Init();
MX_TIM4_Init();
MX_TIM2_Init();
MX_USART6_UART_Init();
HAL_ADC_Start_DMA(&hadc1, value, 2);
while (1)
{
if (isSent == 1)
{
HAL_UART_Transmit_DMA(&huart6, tx_buffer, 27);
// HAL_UART_Transmit_DMA(&huart6, value[0], sizeof(value[0]));
isSent = 0;
}
HAL_Delay(1000);
}
}
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{
isSent = 1;
}
2024-05-15 06:42 AM - edited 2024-05-15 06:46 AM
@ponuliukas wrote:the UART does not work anymore...
What do you mean by that?
EDIT:
You haven't shown your definition of isSent, but it should be 'volatile'
Do you have any conflicts between ADC and UART pins?
2024-05-15 06:46 AM - edited 2024-05-15 06:58 AM
Edit: Cancel - I misunderstood. How do you get "value" into tx_buffer ?
2024-05-15 06:51 AM
@ponuliukas wrote:
uint8_t tx_buffer[27] = "Welcome to BinaryUpdates!\n\r";
Although it doesn't matter in the code you've shown so far, note that this does not leave space for a terminating NUL - so that won't be a proper C string.
To have a proper C string:
uint8_t tx_buffer[] = "Welcome to BinaryUpdates!\n\r";
2024-05-15 06:55 AM
Thank you for the reply @Andrew Neil and @raptorhal2 , and apologies for not being perfectly clear. I edited the question :)
2024-05-15 07:12 AM
It's confusing to edit the question after people have already commented on the question in its original form!
It's better to post an update as a reply.
Again, isSent should be 'volatile'
@ponuliukas wrote:the UART does not work anymore... I do not see anything in my serial monitor (Putty)
That could be because your UART is sending something that's not visible to PuTTY ?
Have you check on the wires with a logic analyser or oscilloscope?
You're ignoring the return value from HAL_UART_Transmit_DMA - it might be telling you something ...
What happens if you do away with the DMA, and just use a plain blocking send?
2024-05-15 07:15 AM
"value" is in binary, you will have to covert it to ASCII characters to be displayed by Putty. Think printf, or make your own conversion.
2024-05-15 07:32 AM
Good to know, will do that from now on :)
When I just use UART I see the text "Welcome to Binaryupdates". It is only when I uncomment:
HAL_ADC_Start_DMA(&hadc1, value, 2);
do I stop seeing anything in my serial monitor.
I have not checked with a logic analyzer nor an oscilloscope :( I Do not have an access to one unfortunately...
Same thing happens if I just use "HAL_UART_Transmit" - It works alone, but If I start the ADC DMA, it doesn't work...
@raptorhal2 at this point, I would like to start by just sending the 27 characters (Welcome to BinaryUpdates!) to confirm that I can send data via uart and read the sensor values at the same time.
2024-05-15 07:43 AM
Check for any conflicts between ADC and UART pins?
2024-05-15 07:47 AM
Doesn't look like there could be any conflict. I will scrutinize the PCB itself more