Software UART Library
The mikroPascal PRO for ARM provides routines for implementing Software UART communication. These routines are hardware independent and can be used with any MCU. The Software UART Library provides easy communication with other devices via the RS232 protocol.
Important : The Software UART library implements time-based activities, so interrupts need to be disabled when using it.
|
Library Routines
Soft_UART_Init
| Prototype |
function Soft_UART_Init(var port: dword; rx, tx: dword; baud_rate : dword; inverted : word) : byte; |
|---|---|
| Description |
Configures and initializes the software UART module. Software UART routines use Delay_Cyc routine. If requested baud rate is too low then calculated parameter for calling If requested baud rate is too high then rounding error of |
| Parameters |
|
| Returns |
|
| Requires |
Nothing. |
| Example |
This will initialize software UART and establish the communication at 56000 bps: Stellariserror := Soft_UART_Init(GPIO_PORTA, 0, 1, 56000, 0); // Initialize Soft UART at 56000 bps STM32error := Soft_UART_Init(GPIOA_ODR, 10, 9, 115200, 0); // Initialize Soft UART at 56000 bps |
| Notes |
The Software UART library implements time-based activities, so interrupts need to be disabled when using it. |
Soft_UART_Read
| Prototype |
function Soft_UART_Read(var error : byte) : byte; |
|---|---|
| Description |
The function receives a byte via software UART. This is a blocking function call (waits for start bit). Programmer can unblock it by calling Soft_UART_Break routine. |
| Parameters |
|
| Returns |
Byte received via UART. |
| Requires |
Software UART must be initialized before using this function. See the Soft_UART_Init routine. |
| Example |
var data_ : byte;
error : word;
...
// wait until data is received
repeat
data_ := Soft_UART_Read(error);
until (error = 0);
// Now we can work with data:
if (data_) then begin ... end
|
| Notes |
The Software UART library implements time-based activities, so interrupts need to be disabled when using it. |
Soft_UART_Write
| Prototype |
procedure Soft_UART_Write(udata : byte); |
|---|---|
| Description |
This routine sends one byte via the Software UART bus. |
| Parameters |
|
| Returns |
Nothing. |
| Requires |
Software UART must be initialized before using this function. See the Soft_UART_Init routine. Be aware that during transmission, software UART is incapable of receiving data – data transfer protocol must be set in such a way to prevent loss of information. |
| Example |
var some_byte : byte; ... some_byte := $0A; // Write a byte via Soft UART Soft_UART_Write(some_byte); |
| Notes |
The Software UART library implements time-based activities, so interrupts need to be disabled when using it. |
Soft_UART_Break
| Prototype |
procedure Soft_UART_Break(); |
|---|---|
| Description |
Soft_UART_Read is blocking routine and it can block the program flow. Calling |
| Parameters |
None. |
| Returns |
Nothing. |
| Requires | Nothing. |
| Example |
|
| Notes |
The Software UART library implements time-based activities, so interrupts need to be disabled when using it. |
Library Example
This example demonstrates simple data exchange via software UART. If MCU is connected to the PC, you can test the example from the mikroPascal PRO for ARM USART communication terminal, launch it from the drop-down menu Tools › USART Terminal or simply click the USART Terminal Icon
.
Stellaris
program Soft_UART;
var error : byte;
counter, byte_read : byte; // Auxiliary variables
begin
GPIO_Digital_Output(@GPIO_PORTD, _GPIO_PINMASK_ALL); // digitalni output
GPIO_PORTD_DATA := 0;
error := Soft_UART_Init(GPIO_PORTA, 0, 1, 56000, 0); // Initialize Soft UART at 56000 bps
if (error > 0) then
begin
GPIO_PORTD_DATA := error; // Signalize Init error
while (TRUE) do nop; // Stop program
end;
Delay_ms(100);
for counter := 'z' downto 'A' do // Send bytes from 'z' downto 'A'
begin
Soft_UART_Write(counter);
Delay_ms(100);
end;
while TRUE do // Endless loop
begin
byte_read := Soft_UART_Read(error); // Read byte, then test error flag
if (error <> 0) then // If error was detected
GPIO_PORTD_DATA := error // signal it on GPIO_PORTD
else
Soft_UART_Write(byte_read); // If error was not detected, return byte read
end;
end.
STM32
program Soft_UART;
var error : byte;
counter, byte_read : byte; // Auxiliary variables
begin
GPIO_Digital_Output(@GPIOD_BASE, _GPIO_PINMASK_ALL); // digitalni output
GPIOD_ODR := 0;
error := Soft_UART_Init(GPIOA_ODR, 10, 9, 115200, 0); // Initialize Soft UART at 56000 bps
if (error > 0) then
begin
GPIOD_ODR := error; // Signalize Init error
while (TRUE) do nop; // Stop program
end;
Delay_ms(100);
for counter := 'z' downto 'A' do // Send bytes from 'z' downto 'A'
begin
Soft_UART_Write(counter);
Delay_ms(100);
end;
while TRUE do // Endless loop
begin
byte_read := Soft_UART_Read(error); // Read byte, then test error flag
if (error <> 0) then // If error was detected
GPIOD_ODR := error // signal it on PORTD
else
Soft_UART_Write(byte_read); // If error was not detected, return byte read
end;
end.
What do you think about this topic ? Send us feedback!



Important : The Software UART library implements time-based activities, so interrupts need to be disabled when using it.

