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

STM8L Discovery - 3 - GPIO

Ở các ví dụ trước ta đã cùng tìm hiểu cách xây dựng, biên dịch và nạp một project mới. Trong ví dụ này ta sẽ xây dựng ứng dụng chớp tắt led trên kit STM8L Discovery.

Đầu tiên ta xây dựng nhanh gọn một hàm delay để tạo thời gian trễ giữa các trạng thái chớp và tắt của led:

void Delay(__IO uint16_t nCount)
{
  /* Decrement nCount value */
  while (nCount != 0)
  {
    nCount--;
  }
}

Trong hàm main ta cấu hình ngõ ra LED LD4 Blue là chân PC7

GPIO_Init(GPIOC, GPIO_Pin_7, GPIO_Mode_Out_PP_Low_Fast);

Trong vòng lập while(1){} ta cho LED chớp tắt như sau:

  while (1)
  {
    /* Toggle LD4 */
    GPIO_ToggleBits(GPIOCGPIO_Pin_7);
    Delay(0xFFFF);
  }



Code Github

Thứ Ba, 3 tháng 1, 2017

STM8L Discovery - 2 - Tìm hiểu thư viện chuẩn

Trong bài này và tất cả các bài viết sau mình sử dụng IAR Embedded Workbench for STMicroelectronics STM8 IDE ver 2.20.2; Thư viện cho vi điều khiển STM8L: STM8L15x_StdPeriph_Driver (MCD Application Team V1.6.1).
Cấu trúc thư mục của thư viện  STM8L15x_StdPeriph_Driver gồm 2 thư mục con 'inc' và 'src'
cấu trúc các file bên trong như sau:
Thao tác khi lập trình là chúng ta sẽ add các file *.c vào bảng quản lý file của trình biên dịch, và thêm đường dẫn thư mục chứa các file *.h trong tab Processor.

Tổng quan sơ lượt về STM8L và cách lập trình:
Đầu tiên chúng ta hãy đọc sơ datasheet và đây chi tiết các chức năng của dòng STM8L (chỉ là MCU 8bit thôi mà quá trời thanh ghi, chức năng, ngoại vi... chưa kể đến các dòng vđk phức tạp khác của hãng ST thì còn như thế nào ^^)
Làm việc với bất kì loại vi điều khiển nào cũng vậy, chúng ta chủ yếu thao tác đọc và ghi trên các thanh ghi, bộ nhớ (flash, ram, rom) của nó. Do vậy mà hãng sản xuất đã cung cúng cho người lập trình bộ thư viện giúp cho việc lập trình có thể dễ dàng hơn.

Có 2 cách để lập trình đều có thể được sử dụng:
  1. Thao tác trực tiếp trên các thanh ghi của vi điều khiển
  2. Thông qua việc sử dụng các hàm xây dựng sẵn trên bộ thư viện 


Bây giờ mình sẽ cùng khám phá vào nội dung của bộ thư viện nhé ^^!

Như đã trình bày trong phần cấu trúc file bên trên ta mở file 'stm8l15x.h' trong thư mục 'inc' sẽ thấy file này định nghĩa tất cả các thanh ghi chức năng và thanh ghi trạng thái của STM8

Tiếp theo là nhóm ngoại vi ví dụ 'stm8l15x_adc.h' sẽ đi đôi với 'stm8l15x_adc.c'
Trong file header .h sẽ định nghĩa chi tiết hơn về thanh ghi của từng ngoại vi, tiếp theo là nhóm khai báo hàm chức năng và nội dung các hàm này được lưu trong file source .c

Sau này các bạn muốn làm việc trên ngoại vi nào thì cứ mở file tên 'stm8l15x_ngoaivi.h' và 'stm8l15x_ngoaivi.c' lên xem và sử dụng thôi. Good luck! :))

Thứ Hai, 2 tháng 1, 2017

STM8L Discovery - 1 - Thiết lập môi trường


Để lập trình cho dòng vi điều khiển STM8 của hãng STMicroelectronic chúng ta cần có chương trình biên dịch và thư viện ngoại vi của hãng ST dành cho dòng vi điều khiển này:

  1. Trình biên dịch: Bạn có thể dùng 2 trình biên dịch sau: IAR- Embedded Workbench for STM8 hoặc STMicroelectronics- ST Visual Develop (STVD). Trong loạt bài viết về STM8L Discovery, theo thói quen, mình sử dụng trình biên dịch IAR STM8. Phần mềm được cho sử dụng miễn phí 30 ngày, có thể mở khóa để sử dụng lâu dài ( các bạn vui lòng tham khảo các bài hướng dẫn trên mạng về vấn đề này). Sau đây là màn hình làm việc của iar
  2. Thư viện ngoại vi cho dòng STM8L bạn có thể tải theo địa chỉ sau: STM8L15x_StdPeriph_Driver. cấu trúc thư mục của thư viện này có các thành phần cơ bản sau: 

trong đó thư mục Libraries chứa các file thư viện ".h" và ".c" cần dùng, thư mục Project chứa các ví dụ mẫu, và project mẫu.

Sau khi đã cài đặt trình biên dịch và tải thư viện ngoại vi bạn có thể tiến hành viết thử ứng dụng đầu tiên như sau:
  1.  Tạo thư mục lưu chương trình, vd mình tạo thư mục STM8_FIRST_PROJECT có 3 thư mục con lib để lưu file thư viện ngoại vi như đã đề cập bên trên, user để lưu file do người dùng viết, project để lưu các file mà trình biên dịch sinh ra trong quá trình viết code.
  2. Mở chương trình IAR. Chọn Project --> Create New Project

chọn thu mục con project để lưu file ".ewp"
sau đó bạn copy các thư mục 'inc' và 'src' trong thư mục 'STM8L15x_StdPeriph_Driver' vào thư mục lib của mình, copy các file 'main.h', 'main.c', 'stm8l15x_conf.h',  'stm8l15x_it.h' và 'stm8l15x_it.c' vào thư mục 'user' của mình.
Vào lại IAR trong tab Workspace nhấp chuột phải vào FIRSTPROJECT... chọn add group để tạo 2 nhóm thư mục 'lib' và 'user' lưu file chương trình
Nhấp chuột phải vào lib chọn add ---> AddFiles chọn các file thư viện cho ngoại vi cần sử dụng
Nhấp chuột phải vào user chọn add---> AddFiles chọn các file 'main.c' 'stm8l15x_it.c'
thư mục Output sẽ được chương tự tạo ra.
Nhấp chuột phải và FirstProject chọn Options tiến hành chọn loại vi điều khiển 
thêm đường dẫn vào các thư mục 'lib\inc' và 'user' 

Để nạp chương trình xuống kit và chạy Debug, ta cài đặt
Tiến hành save Workspace và sau đó là biên dịch 
Bây giờ bạn có thể cắm board STM8L Discovery vào máy tính và nạp bằng các bấm vào nút 'Download and Debug'

Lưu ý: các file trong thư viện ngoại vi của STM8L khi tải về thường để thuộc tính "ReadOnly", muốn chỉnh sửa các file này các bạn phải đổi thuộc tính file lại 

Video: