Thứ Tư, 26 tháng 7, 2017

STM8L Discovery - 4 - USART

Bài này chúng ta sẽ cùng nhau tìm hiểu USART của STM8L sử dụng hàm printf trong thư viện "stdio.h" để gửi dữ liệu.

đầu tiên khai báo các hàm sau:

#include "stdio.h"

#define PUTCHAR_PROTOTYPE int putchar (int c)
#define GETCHAR_PROTOTYPE int getchar (void)


PUTCHAR_PROTOTYPE
{
  /* Write a character to the USART */
  USART_SendData8(USART1, c);
  /* Loop until the end of transmission */
  while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);

  return (c);
}

GETCHAR_PROTOTYPE
{
  int c = 0;
  /* Loop until the Read data register flag is SET */
  while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);
    c = USART_ReceiveData8(USART1);
    return (c);
  }

Cấu hình cổng USART trong hàm main()

Cấu hình xung clock cho USART và cấu hình các ngõ I/O cho USART:

  CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);
  
  CLK_PeripheralClockConfig(CLK_Peripheral_USART1, ENABLE);

  USART_Init( USART1, (uint32_t) 115200, USART_WordLength_8b, USART_StopBits_1,
                       USART_Parity_No, (USART_Mode_TypeDef) (USART_Mode_Tx|USART_Mode_Rx));

  USART_Cmd(USART1, ENABLE);

  GPIO_Init(GPIOC, GPIO_Pin_3, GPIO_Mode_Out_PP_High_Fast);
  GPIO_Init(GPIOC, GPIO_Pin_2, GPIO_Mode_In_PU_No_IT);

Tiếp theo ta sử dụng hàm printf để xuất dữ liệu ra cổng USART như sau:

 printf("\n\r USART STM8L DEMO \n\r");

hay trong hàm while(1){} ta có thể nhận và gửi dữ liệu từ chân RX qua TX của vi điều khiển như sau:

  while (1)
  {
    printf("%c", getchar());
  }

Code Github

Không có nhận xét nào:

Đăng nhận xét