Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Topics - TaoTao

Pages: 1 2 3 [4] 5 6 ... 12
25
คือ ผมใช้ Keyboard Com ส่งค่าผ่าน RS-232 เข้า USART1 แบบ DMA ของ STM32F103
แล้ว MCU รับค่าเก็บในตัวแปร key_get[6]
จากนั้น แสดงผลออก จอ LCD แบบ I2C

หาก ตั้งค่า USART เก็บทีละ มากกว่า 1 char ก็แสดงผลปกติดี
(รูปแนบ 2 ไฟล์แรก)

แต่ ทีผิดปกติ คือ
หากผมตั้งค่า URAST_DMA เก็บทีละ 1 char แล้วส่งค่าสู่ LCD เพื่อแสดงผลทันที

เมื่อกดแป้น KEYBOARD ป้อนตัวเลขเดิม เช่น 1111
แต่ ปรากฎ มันกลายเป็น 1ฑ1ฑ ครับ (รูปแนบ 2 ไฟล์ ล่าง)

กำลังไล่อยู่ ว่า ปัญหาเกิดที่ไหน
เพราะ ฑ Hex เท่ากับ (0x31+0x80)
ซึ่ง 0x80 = 128 คือ 7 bits พอดีเลย

ไม่ได้เป็นเฉพาะเลข 1 นะครับ
แต่เป็นทุกตัวเลย คือ ถ้ากดซ้ำแล้วมันจะรับค่าเพี้ยนทันที
แต่ กดอีกที ค่าจะถูกต้อง สลับกันอยู่อย่างนี้  :-[

ใครเคยเจอปัญหานี้บ้างเปล่าครับ

ขอบคุณล่วงหน้าครับ
นี่โค้ดครับ
Code: [Select]
char key_get[6]= {0,0,0,0,0,0};

int main(void)
{

  /* USER CODE BEGIN 1 */

uint16_t i = 0;
char key_get[6]= {0,0,0,0,0,0};

  /* USER CODE END 1 */

  /* MCU Configuration---------123-------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* Configure the system clock */
  SystemClock_Config();

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_DMA_Init();
  MX_I2C1_Init();
  MX_USART1_UART_Init();

  /* USER CODE BEGIN 2 */

LCD_init();
LCD_put_str(0x85, "Hello", 0);

HAL_UART_Receive_DMA(&huart1, key_get, 1);

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */

if( key_get[i] == 0 ){
continue;
}

// ESCAPE : CLR_DISPLAY
if( key_get[i] == 0x1B ){
LCD_CLR;
i=0;
key_get[0] = 0;
key_get[1] = 0;
key_get[2] = 0;
key_get[3] = 0;
key_get[4] = 0;
key_get[5] = 0;
HAL_UART_Receive_DMA(&huart1, &key_get[0], 1);
continue;
}

if( ++ i == 5 ){

LCD_put_str(0xC0, "     ", i);
LCD_put_str(0xC0, key_get, 4);

i=0;
key_get[0] = 0;
key_get[1] = 0;
key_get[2] = 0;
key_get[3] = 0;
key_get[4] = 0;
key_get[5] = 0;
HAL_UART_Receive_DMA(&huart1, &key_get[0], 1);
continue;
}

LCD_put_str(0xC0, "     ", i);
LCD_put_str(0xC0, key_get, i);

HAL_UART_Receive_DMA(&huart1, &key_get[i], 1);
continue;
}
  /* USER CODE END 3 */
}

26
คือ ผมโคด ไฟกระพริบที่ เมนลูป
เปิด IWDG ไว้ ตั้งค่าไว้ที่ 800ms
ทดลอง ถอด-เสียบ ไฟ ถี่ๆ

บางครั้ง จ่ายไฟ เข้าบอร์ด
(เป็นบอรด minimum ซื้อจากเว็บ)
แต่มันไม่ยอมบุต สู่ user flash ครับ
(ซึ่งผม pull down BOOT0=0 ไว้แล้ว)
เหมือนว่า IWDG ก็คงหลับไปด้วย

ต้องกดปุ่ม reset ที่บอร์ด ถึงจะยอมทำงาน
มัน เป็นบางครั้งนะ ไม่ได้เป็นทุกครั้ง
แต่หาก เสียบ j-link ไว้ จะไม่เป็น

อาจเกิดจากอะไรได้บ้างครับ
ขอบคุณล่วงหน้าครับ

27
คือจะเอา ตัวแปร และตัวเลข ต่างๆ แสดงจอ LCD ครับ
เห็นว่า ต้องแปลงเป็น String ก่อน โดยใช้ ฟังก์ชั่นนี้

char *  itoa ( int value, char * str, int base );

http://fresh2refresh.com/c-programming/c-type-casting/c-itoa-function/

ผมก็พิมพ์ที่หัวเอกสาร เพื่อ include มาทั้ง 3 ไฟล์เลย คือ
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

แต่ พอใช้ฟังก์ชั่น IDE มันกลับไม่รู้จัก
ผมตามเข้าไปดู ใน stdlib.h
ก็ไม่เห็นมีฟังก์ชั่นนี้
งง หนักเลย    :P
มันหายไปไหนอ่ะครับ

ผมใช้ KEIL
Gen ด้วย CubeMX
STM32F103 ครับ

ของคุณล่วงหน้าครับ
__/\__

28
วันสองวันนี้
ได้ลอง ต่อ STM32F103 กับ EEPROM เบอร์ 24LC01B ของ Micro Chip ผ่านทาง I2C1
โดย HW ได้ Pull Up ขา I2C1_SDA และ I2C1_SCLK ด้วย R ทั้งสองขา เข้ากับไฟ 5V

Gen Initial Code ด้วย CubeMX

ทดสอบ RCC, TIM1 ก็ทำงานปกติครับ

แต่ พอลอง โคด ให้ MCU write, read EEPROM แบบ polling
ปรากฎว่า นิ่งเลยครับ เอาสโคปจับ ขา SDA,SCLK ไม่มีปฏิกริยาใดๆ  :-[

อันนี้ โคด ครับ
Code: [Select]

//ประกาศตัวแปร ------------------------------------------------------
uint8_t my_data = 123,
my_data_receive,
my_get[10]={0,0,0,0,0,0,0,0,0,0};

//โคด ----------------------------------------------------------------
my_get[0] = HAL_I2C_GetState(&hi2c1);
my_get[1] = HAL_I2C_IsDeviceReady(&hi2c1, 0xA1, 2, 10);

HAL_I2C_Master_Transmit(&hi2c1, 0xA0, &my_data, 1, 100);
HAL_I2C_Master_Receive(&hi2c1, 0xA1, &my_data_receive, 1, 100);

while(1){ // }

ค่าที่อ่านได้
my_get[0] = 0x20;   // Init I2C already
my_get[1] = 0x02;  // ERR


0xA0, กับ 0xA1
พอดี ใน Data Sheet ของ EEPROM บอกไว้น่ะครับ
ว่ามันคือ DevAddress ของ EEPROM
สั่ง 0xA0 = Write
สั่ง 0xA1 = Read

ใครเคยใช้ HAL Lib กับ STM32 ผ่าน I2C แล้ว Chip มันทำงานบ้างครับ
อืม ทำไมของมันไม่ทำงานหว่า  ขา SCLK ไม่เห็นจะมีรูปคลื่นอะไรเลย
งง  @_@!

ขอบคุณสำหรับคำตอบ ล่วงหน้าครับ
 :-[

29
พอดีว่า อาจจะได้ใช้ MODBUS ครับ
โดย ปัจจุบัน ใช้ M3 STM32 ควบคุมผ่าน port RS232

พอหาข้อมูล เห็นว่า พวกโรงงาน ใช้ MODBUS กันเยอะ
เพราะกัน noise ได้ดี เดินสายได้ยาว และพ่วงลูกได้ทีละตั้งหลายๆ ตัว
ชิป SN75175 ก็ถูกดีเสียด้วย ตั้ง 7 บาท :o
ถูกกว่า RS232 เยอะเลย  ;D

เลยคิดว่า จะเพิ่มพอร์ท RS485
และ รับ-ส่งค่า ผ่านทาง โปรโตคอล MODBUS น่ะครับ

มีใครมี ข้อมูลเชิงลึก หรือ ตัวอย่างจริงๆ บ้างอ่ะครับ

ขอบคุณล่วงหน้าครับ
 8)

30
ความต้องการ ไม่สิ้นสุดจริงๆ  ;D
ใช้ Keil ตัว Eva อยู่ครับ ฟรี 32kB
คือ มันก็พออยู่นะ
เพราะ โค้ดผม ไม่ใหญ่โตอะไร

แต่ ลอง โหลด GNU Tool Chain มาเพื่อ Comply
เพราะเห็นว่า ไม่มี Limit Code Size
โค้ด 3 บรรทัด Error 350 แห่ง  :-[

บางเว็บ บอกมาว่า
ตอนเลือกที่ Cube MX เลือกที่
TrueStudio แต่ก็ยัง Comply ไม่ผ่านครับ

ผมลองทำตาม ที่นี่ครับ :

http://wunderkis.de/stm32cube/index.html

ติด 2 บรรทัดสุดท้าย งง  @_@!
ภาษาปะกิต ไม่แข็งแรง

//--------------------------------------------------------------
Create your project using the STM32CubeMX software
Choose "TrueSTUDIO" as Toolchain
Set "Copy only the necessary library files" option
Generate the Code
Copy the Makefiles from the template over the created directory structure
type "Make" at the top level directory of the project
//--------------------------------------------------------------

ใครทำผ่านบ้างแล้วอ่ะครับ
 :-[

31
คือ ผมลองตั้ง TIM1 ดูบิต TIM1->CNT
และ Interrrupt TIM1
มันก็เหมือนว่า จะเชื่อไม่ได้

เพราะ ตำแหน่งเดียวกันที่ ISR ถัดไป
ค่ามันไม่เท่ากัน เฉยเลย

ARM มันมีวิธีอื่นอีกเปล่าอ่ะครับ
ขอบคุณล่วงหน้าครับ
 8)

32
ก่อนหน้านี้ เคยใช้งาน STM32F0
กับ Keil ก็ใช้ได้

ทีนี้ Uninstall License หายหมด
และจะลงใหม่ เป็นแบบ Evo 32kB
เพื่อใช้ STM32F0 / F1 / F4

แล้ว
Product Serial Number (PSN)
แบบ Evaluation
จะหาได้จากไหนอ่ะครับ

ขอบคุณล่วงหน้าครับ
 :-[

Pages: 1 2 3 [4] 5 6 ... 12