เปรียบเทียบระหว่าง เซ็นเซอร์อุณหภูมิ PT100 สอบสวนและ โมดูล DS18B20
1) หลักการพื้นฐานของการรับสัญญาณ
①ความต้านทานของ PT100 เปลี่ยนแปลงตามสัดส่วนกับอุณหภูมิ (อุณหภูมิสูงขึ้น, ยิ่งความต้านทานมากขึ้น), แต่การเปลี่ยนแปลงความต้านทานมีขนาดเล็กมาก, เกี่ยวกับ 0.385 โอ้ / ระดับ;
2. ช่วงการวัดอุณหภูมิของ PT100 คือ -200°C -200°C, และที่ 0°C, ความต้านทานก็เท่ากับทุกประการ 100 โอ้;
3. กระแสไฟฟ้าในการทำงานของ PT100 ควรน้อยกว่า 5 มิลลิแอมป์;
④ แม้ว่าความต้านทานของ PT100 จะเปลี่ยนไปตามอุณหภูมิก็ตาม, อัตราการเปลี่ยนแปลง (นั่นคือ, ค่า K ค่า K ค่า K) จะแตกต่างกันในช่วงอุณหภูมิที่ต่างกัน.
2) ตารางการเปลี่ยนแปลงความต้านทานอุณหภูมิ PT100
3. วงจรขับ PT100
1) โดยวิธีแบ่งแรงดันไฟฟ้า, AD รวบรวมแรงดันไฟฟ้า PT100 เพื่อให้ได้ค่าความต้านทานเพื่อคำนวณอุณหภูมิ
ค่าความต้านทาน PT100 ในน้ำที่อุณหภูมิห้อง (25℃25℃25℃) เป็นเรื่องเกี่ยวกับ 109.89 โอ้.
ไมโครคอนโทรลเลอร์ส่งออกแรงดันไฟฟ้า 3.3V, และแรงดันไฟฟ้าหารด้วย PT100 มีค่าประมาณ:
109.89 ∗ 0.005 - 0.54945 วี
ค่า AD ที่แปลงตามสูตรการแปลง AD มีค่าประมาณ:
0.54945 / 3.3 ∗ 4096 - 681.98 data 682
เมื่ออุณหภูมิสูงขึ้นหนึ่งองศา, สมมติว่าแนวต้านของ PT100 เพิ่งเพิ่มขึ้นมา 0.385 โอ้, ค่าการเปลี่ยนแปลงของแรงดันไฟฟ้าที่หารจะเท่ากับประมาณ:
0.385 ∗ 0.005 - 0.001925 วี
ค่า AD ที่แปลงตามสูตรการแปลง AD มีค่าประมาณ:
0.001925 / 3.3 ∗ 4096 - 2.39 data 2
ในการทดลอง, พบว่าเนื่องจากแรงดันไฟฟ้า 3.3V ของแหล่งจ่ายไฟ stm32 ไม่เสถียร, ADC ได้รวบรวมความผันผวนของแรงดันไฟฟ้า PT100 และข้อผิดพลาดในการแบ่งแรงดันไฟฟ้ามีขนาดใหญ่. โซลูชันการปรับให้เหมาะสมคือการออกแบบวงจรแหล่งจ่ายกระแสคงที่. โดยรวบรวมแรงดันของ PT100 และกระแสของแหล่งกำเนิดกระแสคงที่, สามารถรับความต้านทานของ PT100 ได้, แล้วจะได้ค่าอุณหภูมิได้.
2) วงจรแหล่งจ่ายกระแสคงที่ตามตัวควบคุม LDO (MD5333)
มีวงจรขับสำหรับทดสอบ PT100 บนอินเทอร์เน็ตมากมาย, เช่นวงจรดีซีบริดจ์, วงจรแหล่งจ่ายกระแสคงที่ขึ้นอยู่กับแอมพลิฟายเออร์ในการดำเนินงาน, ฯลฯ. ผู้เขียนยังใช้เวลามากในการเลือกวงจรการขับขี่, โดยคำนึงถึงความยากในการทำบอร์ดและจำนวนส่วนประกอบ, และสุดท้ายก็เลือกวงจรต้นทางกระแสคงที่ตามตัวควบคุม LDO (MD5333). แผนภาพวงจรมีดังนี้:
ณ จุดนี้, การเลือกฮาร์ดแวร์เสร็จสมบูรณ์โดยพื้นฐานแล้ว. บอร์ดพัฒนาที่ใช้คือ Zhengdian Atom F10ZET6 Elite Board
โมดูล DS18B20
เพื่อทดสอบอุณหภูมิแบบเรียลไทม์และการเปรียบเทียบอุณหภูมิ PT100, มีการเพิ่มโมดูล DS18B20 สำหรับการทดสอบเปรียบเทียบการสอบเทียบ
1) ข้อมูลเบื้องต้นเกี่ยวกับ DS18B20
DS18B20 เป็นเซ็นเซอร์อุณหภูมิบัสเดี่ยวที่มีช่วงอุณหภูมิทดสอบ -55~+125°C และความแม่นยำ ±0.5°C. อุณหภูมิของสนามจะถูกส่งโดยตรงในลักษณะดิจิทัลบัสเดียว, ซึ่งช่วยเพิ่มความสามารถในการต่อต้านการแทรกแซงของระบบอย่างมาก. สามารถอ่านอุณหภูมิที่วัดได้โดยตรง, และสามารถรับรู้วิธีการอ่านค่าดิจิตอล 9 ~ 12 บิตผ่านการเขียนโปรแกรมอย่างง่ายตามความต้องการที่แท้จริง. ช่วงแรงดันไฟฟ้าในการทำงานคือ 3 ~ 5.5V, และใช้รูปแบบบรรจุภัณฑ์ที่หลากหลาย, ทำให้การตั้งค่าระบบมีความยืดหยุ่นและสะดวกสบาย. ความละเอียดที่ตั้งไว้และอุณหภูมิการเตือนที่ผู้ใช้กำหนดจะถูกจัดเก็บไว้ใน EEPROM และจะยังคงบันทึกไว้หลังจากไฟฟ้าดับ.
2) รู้เบื้องต้นเกี่ยวกับระยะเวลาการทำงานของ DS18B20
อุปกรณ์บัสเดี่ยวทั้งหมดต้องมีจังหวะสัญญาณที่เข้มงวดเพื่อให้มั่นใจในความสมบูรณ์ของข้อมูล. DS18B20 มี 6 ประเภทสัญญาณ: รีเซ็ตชีพจร, ชีพจรตอบสนอง, เขียน 0, เขียน 1, อ่าน 0 และอ่าน 1. สัญญาณทั้งหมดนี้, ยกเว้นชีพจรตอบสนอง, เป็นสัญญาณซิงโครนัสที่โฮสต์ส่ง. และคำสั่งและข้อมูลทั้งหมดจะถูกส่งด้วยไบต์ที่ต่ำก่อน.
1 รีเซ็ตพัลส์และพัลส์ตอบสนอง
การสื่อสารทั้งหมดบนบัสเดียวเริ่มต้นด้วยลำดับการเริ่มต้น. โฮสต์ส่งออกระดับต่ำและคงระดับต่ำไว้อย่างน้อย 480us เพื่อสร้างพัลส์รีเซ็ต. จากนั้นเจ้าบ้านก็ปล่อยรถบัส, และตัวต้านทานแบบดึงขึ้น 4.7K จะดึงบัสตัวเดียวให้สูง, ด้วยเวลาหน่วงเวลา 15 ~ 60us, และเข้าสู่โหมดการรับ (รับ). จากนั้น DS18B20 จะดึงบัสต่ำเป็นเวลา 60~240us เพื่อสร้างพัลส์ตอบสนองระดับต่ำ.
② เขียนจังหวะเวลา
ระยะเวลาการเขียนรวมถึงการเขียนด้วย 0 เวลาและการเขียน 1 เวลา. การกำหนดเวลาการเขียนทั้งหมดต้องมีอย่างน้อย 60us, และต้องใช้เวลากู้คืนอย่างน้อย 1us ระหว่างการกำหนดเวลาการเขียนอิสระสองครั้ง. การกำหนดเวลาการเขียนทั้งสองเริ่มต้นด้วยการที่โฮสต์ดึงบัสลง. เขียน 1 เวลา: โฮสต์ส่งออกระดับต่ำ, ความล่าช้าสำหรับ 2us, แล้วจึงปล่อยรถบัส, ล่าช้า 60us. เขียน 0 เวลา: โฮสต์ส่งออกระดับต่ำ, ความล่าช้าสำหรับ 60us, แล้วปล่อยรถบัสด้วยดีเลย์ 2us.
3 จับเวลาการอ่าน
อุปกรณ์บัสเดี่ยวจะส่งข้อมูลไปยังโฮสต์เมื่อโฮสต์กำหนดเวลาการอ่านเท่านั้น. ดังนั้น, หลังจากที่โฮสต์ออกคำสั่งอ่านข้อมูล, ต้องสร้างจังหวะการอ่านทันทีเพื่อให้ทาสสามารถส่งข้อมูลได้. การกำหนดเวลาการอ่านทั้งหมดต้องมีอย่างน้อย 60us, และต้องใช้เวลาในการกู้คืนอย่างน้อย 1us ระหว่างการกำหนดเวลาการอ่านอิสระสองครั้ง. เวลาในการอ่านแต่ละครั้งจะเริ่มต้นโดยโฮสต์, ซึ่งดึงรถบัสลงอย่างน้อย 1us. โฮสต์จะต้องปล่อยบัสในช่วงเวลาที่อ่าน และสุ่มตัวอย่างสถานะบัสภายใน 15us หลังจากเริ่มกำหนดเวลา. กระบวนการกำหนดเวลาการอ่านโดยทั่วไปคือ: โฮสต์ส่งสัญญาณการหน่วงเวลาระดับต่ำที่ 2us, จากนั้นโฮสต์จะสลับไปที่โหมดอินพุตล่าช้าที่ 12us, จากนั้นอ่านระดับปัจจุบันของบัสเดี่ยว, แล้วล่าช้า 50us.
หลังจากที่เข้าใจจังหวะบัสเดี่ยวแล้ว, มาดูกระบวนการอ่านอุณหภูมิโดยทั่วไปของ DS18B20 กัน. กระบวนการอ่านอุณหภูมิโดยทั่วไปของ DS18B20 คือ: รีเซ็ต → ส่ง SKIPROM (0xCC) → ส่งคำสั่งเริ่มการแปลง (0x44) → ล่าช้า → รีเซ็ต → ส่งคำสั่ง SKIPROM (0xCC) → ส่งคำสั่งหน่วยความจำ (0เอ็กซ์บีอี) → อ่านข้อมูลสองไบต์ (เช่น. อุณหภูมิ) อย่างต่อเนื่อง → สิ้นสุด.
3) แผนผังและการกำหนดค่า CUBEMAX
จากแผนผัง, จะเห็นได้ว่า DS18B20 เปิดใช้งานด้วยพอร์ต PG11 เพื่อเปิดพอร์ตอนุกรมเพื่อพิมพ์ข้อมูลอุณหภูมิ
4) ส่วนรหัส
ส่วนของโค้ดจะปลูกถ่ายไลบรารี ds18b20 ของ Zhengdian Atom และทำการแก้ไขเล็กน้อย
#ถ้าndef __DS18B20_H
#กำหนด __DS18B20_H
#รวม “tim.h”
/***********************************************************************************/
/* คำจำกัดความของพิน DS18B20 */
#กำหนด DS18B20_DQ_GPIO_PORT GPIOG
#กำหนด DS18B20_DQ_GPIO_PIN GPIO_PIN_11
#กำหนด DS18B20_DQ_GPIO_CLK_ENABLE() ทำ{ __HAL_RCC_GPIOG_CLK_ENABLE(); }ในขณะที่(0) /* เปิดใช้งานนาฬิกาพอร์ต PG */
/**********************************************************************************************/
/* ฟังก์ชั่นการทำงานของ IO */
#กำหนด DS18B20_DQ_OUT(x) ทำ{ x ? \
HAL_GPIO_WritePin(DS18B20_DQ_GPIO_PORT, DS18B20_DQ_GPIO_PIN, GPIO_PIN_SET) : \
HAL_GPIO_WritePin(DS18B20_DQ_GPIO_PORT, DS18B20_DQ_GPIO_PIN, GPIO_PIN_รีเซ็ต); \
}ในขณะที่(0) /* เอาต์พุตพอร์ตข้อมูล */
#กำหนด DS18B20_DQ_IN HAL_GPIO_ReadPin(DS18B20_DQ_GPIO_PORT, DS18B20_DQ_GPIO_PIN) /* อินพุตพอร์ตข้อมูล */
uint8_t ds18b20_init(เป็นโมฆะ); /* เริ่มต้น DS18B20 */
uint8_t ds18b20_check(เป็นโมฆะ); /* ตรวจสอบว่ามี DS18B20 อยู่หรือไม่ */
สั้น ds18b20_get_temperature(เป็นโมฆะ);/* รับอุณหภูมิ */
#สิ้นสุด
5. โมดูลควบคุมระยะไกลอินฟราเรด
1) โปรโตคอลการเข้ารหัสโมดูลไร้สาย
วิธีการเข้ารหัสที่ใช้กันอย่างแพร่หลายสำหรับการควบคุมระยะไกลแบบอินฟราเรด ได้แก่: โปรโตคอล NEC ของ PWM (การมอดูเลตความกว้างพัลส์) และโปรโตคอล RC-5 ของ Philips PPM (การปรับตำแหน่งชีพจร). รีโมทคอนโทรลที่มาพร้อมกับบอร์ดพัฒนาใช้โปรโตคอล NEC, ซึ่งมีคุณสมบัติดังต่อไปนี้:
1. 8-ที่อยู่บิตและความยาวคำสั่ง 8 บิต;
2. ที่อยู่และคำสั่งจะถูกส่งสองครั้ง (เพื่อให้มั่นใจในความน่าเชื่อถือ);
3. การมอดูเลตตำแหน่งพัลส์ PWM, โดยมีรอบการทำงานของตัวพาอินฟราเรดที่ส่งเป็นตัวแทน “0” และ “1”;
4. ความถี่ของผู้ให้บริการคือ 38Khz;
5. เวลาบิตคือ 1.125ms หรือ 2.25ms;
ในระเบียบการของ NEC, วิธีการตั้งค่าข้อมูลในโปรโตคอลเป็น ‘0’ หรือ '1'? ที่นี่, ตัวรับอินฟราเรดและตัวส่งสัญญาณอินฟราเรดจะถูกแยกออกจากกัน.
เครื่องส่งสัญญาณอินฟราเรด: ส่งข้อมูลโปรโตคอล '0' = 560us ของการส่งสัญญาณของผู้ให้บริการ + 560เราไม่มีการส่งสัญญาณของผู้ให้บริการ
ส่งข้อมูลโปรโตคอล '1' = 560us ของการส่งสัญญาณของผู้ให้บริการ + 1680เราไม่มีการส่งสัญญาณของผู้ให้บริการ
คำจำกัดความบิตของเครื่องส่งสัญญาณอินฟราเรดแสดงในรูปด้านล่าง
เครื่องรับอินฟราเรด: รับข้อมูลโปรโตคอล '0' = 560us ระดับต่ำ + 560เราระดับสูง
รับข้อมูลโปรโตคอล '1' = 560us ระดับต่ำ + 1680เราระดับสูง
รูปแบบข้อมูลของคำสั่งรีโมทคอนโทรล NEC คือ: เทอร์มินัลการซิงโครไนซ์, รหัสที่อยู่, รหัสผกผันที่อยู่, รหัสควบคุม, ควบคุมรหัสผกผัน. รหัสการซิงโครไนซ์ประกอบด้วยระดับต่ำ 9ms และระดับสูง 4.5ms. รหัสที่อยู่, รหัสผกผันที่อยู่, รหัสควบคุม, และโค้ดควบคุมผกผันเป็นรูปแบบข้อมูล 8 บิตทั้งหมด. โดยจะถูกส่งไปตามลำดับบิตแรกและบิตสูงสุดท้าย. รหัสผกผันใช้เพื่อเพิ่มความน่าเชื่อถือในการส่งข้อมูล.
ดังนั้น, การจับอินพุตสามารถใช้เพื่อวัดความกว้างพัลส์ของระดับสูงเพื่อให้เกิดการถอดรหัสการควบคุมระยะไกล.
2) แผนผังและการกำหนดค่า CUBEMAX
จากแผนผัง, เราจะเห็นว่าโมดูลไร้สายเปิดใช้งานผ่านพิน PB9 และรวบรวมผ่าน 4 ช่องทางของ TIM4:
พินเริ่มต้นของ TIM4_CH4 ไม่ใช่ PB9, ดังนั้นจึงจำเป็นต้องตั้งค่าด้วยตนเอง, และการตั้งค่าการขัดจังหวะจะเปิดขึ้นพร้อมกัน
3) ส่วนรหัส
จับภาพขอบที่เพิ่มขึ้นผ่านฟังก์ชันการโทรกลับของทิม
ในเวลานี้, สามารถรับสัญญาณถอดรหัสได้:
ในเวลานี้, ข้อมูลมีความซับซ้อนมากขึ้นและสามารถประมวลผลได้เล็กน้อย:
เอฟเฟกต์มีดังนี้:
ตัวเลขสองตัวสุดท้ายคือตัวถอดรหัสและรหัสผกผัน. ในเวลานี้, สามารถกำหนดเป็นมาโครเพื่อปรับเกณฑ์อุณหภูมิได้:
เอฟเฟกต์มีดังนี้:
รหัสชิ้นส่วนอินฟราเรด:
/* รหัสผู้ใช้ BEGIN ส่วนหัว */
/**
******************************************************************************
* @ไฟล์ : main.c
* @รวบรัด : เนื้อหาของโปรแกรมหลัก
******************************************************************************
* @ความสนใจ
*
* <h2><ศูนย์>&สำเนา; ลิขสิทธิ์ (C) 2024 เอสทีไมโครอิเล็กทรอนิกส์.
* สงวนลิขสิทธิ์.</ศูนย์></h2>
*
* ส่วนประกอบซอฟต์แวร์นี้ได้รับอนุญาตจาก ST ภายใต้ใบอนุญาต BSD 3-Clause,
* ที่ “ใบอนุญาต”; คุณไม่สามารถใช้ไฟล์นี้ได้เว้นแต่จะเป็นไปตามข้อกำหนดของ
* ใบอนุญาต. คุณสามารถขอรับสำเนาใบอนุญาตได้ที่:
* opensource.org/licenses/BSD-3-Clause
*
******************************************************************************
*/
/* ส่วนหัวของรหัสผู้ใช้ */
/* รวมถึง ——————————————————————*/
#รวม “main.h”
#รวม “tim.h”
#รวม “usart.h”
#รวม “จีพีโอ.เอช”
/* ส่วนตัวได้แก่ ———————————————————-*/
/* รหัสผู้ใช้เริ่มต้นรวมถึง */
#รวม “stdio.h”
#รวม “สตริง.h”
#กำหนด MAXUP 157
#กำหนด MAXDOWN 87
#กำหนดขั้นต่ำ 221
#กำหนดมินดาวน์ 61
/* สิ้นสุดรหัสผู้ใช้รวมถึง */
/* typedef ส่วนตัว ———————————————————–*/
/* รหัสผู้ใช้เริ่มต้น PTD */
/* รหัสผู้ใช้ สิ้นสุด PTD */
/* ส่วนตัวกำหนด ————————————————————*/
/* รหัสผู้ใช้ BEGIN PD */
/* รหัสผู้ใช้ สิ้นสุด PD */
/* มาโครส่วนตัว ————————————————————-*/
/* USER CODE เริ่ม PM */
/* USER CODE สิ้นสุด PM */
/* ตัวแปรส่วนตัว ———————————————————*/
/* รหัสผู้ใช้เริ่มต้น PV */
uint32_t upCount=0;
uint16_t ค่าเพิ่ม=0;
uint16_t ค่าลง=0;
uint8_t isUpCapt=1;
ความกว้าง uint16_t=0;
บัฟเฟอร์ uint16_t[128]-{0};
uint16_t bufferId=0;
uint8_t rcvFalg=0;
/* PV สิ้นสุดรหัสผู้ใช้ */
/* ต้นแบบฟังก์ชันส่วนตัว ———————————————–*/
เป็นโมฆะ SystemClock_Config(เป็นโมฆะ);
/* รหัสผู้ใช้เริ่มต้น PFP */
/* รหัสผู้ใช้สิ้นสุด PFP */
/* รหัสผู้ใช้ส่วนตัว ———————————————————*/
/* รหัสผู้ใช้เริ่มต้น 0 */
เป็นโมฆะ HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
อัพนับ++;
}
เป็นโมฆะ HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
ถ้า(isUpCapt)//หากเป็นการจับขอบที่เพิ่มขึ้น
{
ValueUp=HAL_TIM_ReadCapturedValue(ทิม,TIM_CHANNEL_4);
isUpCapt=0;
__HAL_TIM_SET_CAPTUREPOLARITY(ทิม,TIM_CHANNEL_4,TIM_ICPOLARITY_FALLING);
จำนวนขึ้น=0;
}
อื่น{
ValueDown=HAL_TIM_ReadCapturedValue(ทิม,TIM_CHANNEL_4);
isUpCapt=1;
__HAL_TIM_SET_CAPTUREPOLARITY(ทิม,TIM_CHANNEL_4,TIM_ICPOLARITY_RISING);
width=ValueDown+upCount*65536-ValueUp;
ถ้า(ความกว้าง>4400&&ความกว้าง<4600)
{
รหัสบัฟเฟอร์=0;
บัฟเฟอร์[รหัสบัฟเฟอร์++]=ความกว้าง;
}
อย่างอื่นถ้า(รหัสบัฟเฟอร์>0)
{
บัฟเฟอร์[รหัสบัฟเฟอร์++]=ความกว้าง;
ถ้า(รหัสบัฟเฟอร์>32)
{
rcvFalg=1;
รหัสบัฟเฟอร์=0;
}
}
}
}
เป็นโมฆะ bitBuffer2num(ถ่านหมายเลข[])
{
หมายเลข[0]=0;
หมายเลข[1]=0;
หมายเลข[2]=0;
หมายเลข[3]=0;
สำหรับ(อินท์ i=0;ฉัน<32;ฉัน++)
{
ถ้า(บัฟเฟอร์[ฉัน+1]<1000)
{
หมายเลข[ฉัน/8]=หมายเลข[ฉัน/8]<<1;
}
อื่น
{
หมายเลข[ฉัน/8]=หมายเลข[ฉัน/8]<<1;
หมายเลข[ฉัน/8]|=0x01;
}
}
}
/* รหัสผู้ใช้สิ้นสุด 0 */
/**
* @brief จุดเข้าสู่แอปพลิเคชัน.
* @retval int
*/
int หลัก(เป็นโมฆะ)
{
/* รหัสผู้ใช้เริ่มต้น 1 */
ถ่าน printbuff[128]-{0};
ถ่านหมายเลข[4]-{0};
คีย์ถ่าน=0;
/* รหัสผู้ใช้สิ้นสุด 1 */
/* การกำหนดค่า MCU——————————————————–*/
/* รีเซ็ตอุปกรณ์ต่อพ่วงทั้งหมด, เริ่มต้นอินเทอร์เฟซ Flash และ Systick. */
HAL_เริ่มต้น();
/* รหัสผู้ใช้เริ่มต้น เริ่มต้น */
/* รหัสผู้ใช้สิ้นสุด เริ่มต้น */
/* กำหนดค่านาฬิกาของระบบ */
SystemClock_Config();
/* รหัสผู้ใช้เริ่มต้น SysInit */
/* รหัสผู้ใช้สิ้นสุด SysInit */
/* เริ่มต้นอุปกรณ์ต่อพ่วงที่กำหนดค่าไว้ทั้งหมด */
MX_GPIO_เริ่มต้น();
MX_TIM4_เริ่มต้น();
MX_USART1_UART_เริ่มต้น();
/* รหัสผู้ใช้เริ่มต้น 2 */
/* รหัสผู้ใช้สิ้นสุด 2 */
/* วนซ้ำไม่สิ้นสุด */
/* รหัสผู้ใช้เริ่มต้นในขณะที่ */
HAL_GPIO_TogglePin(LED0_GPIO_พอร์ต,LED0_พิน);
HAL_TIM_Base_Start_IT(&htim4);//การอัปเดตตัวจับเวลาทำให้เกิดการขัดจังหวะ
HAL_TIM_IC_Start_IT(&htim4,TIM_CHANNEL_4);//
ในขณะที่ (1)
{
ถ้า(rcvFalg)
{
สำหรับ(อินท์ i=0;ฉัน<4;ฉัน++)
{
บิตบัฟเฟอร์2num(หมายเลข);
วิ่ง(หนังพิมพ์,”0xx “,หมายเลข[ฉัน]);
HAL_UART_ส่ง(&huart1, พิมพ์บัฟ,สเตรน(หนังพิมพ์),HAL_MAX_DELAY);
}
// วิ่ง(หนังพิมพ์,”%คุณ “,บัฟเฟอร์[ฉัน]);
// HAL_UART_ส่ง(&huart1, พิมพ์บัฟ,สเตรน(หนังพิมพ์),HAL_MAX_DELAY);
// }
HAL_UART_ส่ง(&ฮวาร์ต1,”\r\n”,2,HAL_MAX_DELAY);
rcvFalg=0;
}
พิมพ์ฉ(“%d\r\n”,หมายเลข[3]);
ถ้า(หมายเลข[3]==157)
{
พิมพ์ฉ(“111111\r\n”);
}
HAL_ดีเลย์(1000);
/* รหัสผู้ใช้สิ้นสุดในขณะนั้น */
/* รหัสผู้ใช้เริ่มต้น 3 */
}
/* รหัสผู้ใช้สิ้นสุด 3 */
}
/**
* @brief การกำหนดค่านาฬิการะบบ
* @retval ไม่มี
*/
เป็นโมฆะ SystemClock_Config(เป็นโมฆะ)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
English
Afrikaans
العربية
বাংলা
bosanski jezik
Български
Català
粤语
中文(简体)
中文(漢字)
Hrvatski
Čeština
Nederlands
Eesti keel
Suomi
Français
Deutsch
Ελληνικά
हिन्दी; हिंदी
Magyar
Bahasa Indonesia
Italiano
日本語
한국어
Latviešu valoda
Lietuvių kalba
македонски јазик
Bahasa Melayu
Norsk
پارسی
Polski
Português
Română
Русский
Cрпски језик
Slovenčina
Slovenščina
Español
Svenska
ภาษาไทย
Türkçe
Українська
اردو
Tiếng Việt









