fbpx

Working with STM32 and UART part 2: Sending strings and variable polling mode

In previous guide(part 1), we looked for how to send a single character. Now we will extend the usage of uart module to send a string contains “Hello from stm32f4” and a variable as “my variable is variable”

UART

In this guide we will cover the following:

  • Extra steps needed to send a string
  • Code
  • Results

1. Extra steps needed to send a string

Starting from part 1, we need to add the following two header file

#include "stdio.h" //stdio which allows us to use sprinttf 
#include "stdint.h" //standardd int defention 

then the prototype of the function to send a string

void UART_Write_String(char *p);

then the buffer to hold the data and variable

char buffer[40]={'0'};
unsigned int variable;

Now for the function that allows us to print the string

void UART_Write_String(char *p)
	{
	while(*p!='\0')
{
USART_write(*p);
p++;
}
}

The function works as following

First, we pass the string as argument, then it sends the string character by character until reaches NULL (‘\0’) then it stops

2. Code

#include "stm32f4xx.h"                  // Device header
#include "stdio.h"
#include "stdint.h"
void USART_write(int ch);
void USART2_Init(void);
void delay(int delayms);
void UART_Write_String(char *p);

char buffer[40]={'0'};
unsigned int variable;

int main(){

USART2_Init();
while(1){
UART_Write_String("---------------------------\r\n");
UART_Write_String("hello from stm32f411RE\r\n");
sprintf(buffer,"my variable is %u \r\n",++variable);
UART_Write_String(buffer);
UART_Write_String("---------------------------\r\n");
//variable=variable+1;
delay(1000);
}
}

void USART2_Init(void){
RCC->APB1ENR|=RCC_APB1ENR_USART2EN;
RCC->AHB1ENR|=RCC_AHB1ENR_GPIOAEN;
GPIOA->AFR[0]=0x0700;
GPIOA->MODER|=(1<<5);//set bit5
GPIOA->MODER&=~(1<<4);//reset bit4
USART2->BRR  = 0x0681;    //9600 @16MHz
USART2->CR1  |=0x2008; // enable tx

}

void USART_write(int ch){
while(!(USART2->SR&0x0080)){
}
USART2->DR=(ch);
	
}

void UART_Write_String(char *p)
	{
	while(*p!='\0')
{
USART_write(*p);
p++;
}
}


void delay(int delayms){
volatile int i;
	for(; delayms>0;delayms--){
	for(i=0;i<3192;i++);
	}
}

3. Results

After compiling and uploading the code, open your serial terminal and set the baud to 9600 and you will get this

Add Comment

Your email address will not be published. Required fields are marked *