È«µºÍøÂ纣ÄÏ»°Í³Ò»¿¼ÊÔ

本文详细解析了全网测试一考的内容与规则,包括考试流程、注意事项及样例题目等关键信息,帮助考生了解考试形式,提高备考效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


È«µºÍøÂ纣ÄÏ»°Í³Ò»¿¼ÊÔ

1 ¿¼ÊÔ½øÐÐ15Ãëºó²»µÃ½øÈ뿼³¡¡¡

2 ¿¼ÊÔÆÚ¼ä´øÈ뿼³¡µÄÒûÁÏÒ»ÂɵÃÓɱ¾µºÆóÒµÉú²ú£¨ÀýÈçÒ¬Ê÷Ò¬Ö­£¬»ðɽÑÒË®£©¡¡ ·ñÔòÒ»ÂÉÈ¡Ïû¿¼ÊÔ×ʸñ£¬²¢ÍϽø²ÞËù´ò£¡¡¡

3 ½ÓËÍ¿¼ÉúµÄ³µÁ¾Ò²Ò»ÂÉÏàÓ¦µÄÓɱ¾µºÆóÒµÉú²ú£¨ÀýÈç 323 ÆÕÁ¦Âí £©¡¡ÔòÒ»ÂÉÈ¡Ïû¿¼ÊÔ×ʸñ£¬²¢Ã»ÊÕÏà¹Ø³µÁ¾£¡

4 ËùÓп¼ÉúÒ»ÂÉ´©ÍÏЬ½øÈ뿼³¡£¬Ã»ÓÐÍÏЬµÄÈ¡Ïû¿¼ÊÔ×ʸñ£¡¡¡¡¡

5 ¿¼Éú²»±Ø×Ô´øÑÀÇ©£¬¿¼ÊÔÆÚ¼ä½«Óɺ£ÄÏ´å¹â¼¯ÍÅÃâ·Ñ¸ø¸÷¿¼Éú·¢Ò»°ü¡¡

6 ¿¼ÊÔÆÚ¼ä²»Ðí½»Í·½Ó¶ú£¬²»Ðí͵¿´ËûÈËÊÔ¾í£¬µ«¿ÉÒԽӵ绰3´Î£¡¡¡

2005ÄêÈ«µºÍøÂ纣ÄÏ»°Í³Ò»¿¼ÊÔ

A¾í¡¡

ÐÕÃû____ ÄêÁä___ÐÔ±ð_____ ¼Ò²ú___ ¼ÒÍ¥³ÉÔ±ÓÐÎÞ´¦¼¶ÒÔÉϸɲ¿____ ÍøÁä___?<wbr>?<wbr> QQºÅ____ ×¼¿¼Ö¤ºÅ _____¡¡

Ò» ÌýÁ¦²¿·Ö 20·Ö

¶þ ÔĶÁÀí½â 40 ·ÖÒ»

?<wbr>?<wbr>?<wbr> ×ö¶¬Ñ©À­~~£¬ÎÝÅÔÎݱߵIJ®µù²®ÆÅ¶¼É±¼¦ÖóѼ£¡°¡¹·¸çÈ¥²¥Ìï»ØÀ´£¬ÒÁ¿ª¿Ú¾ÍºÍÒÁÀÏÆÅ½²¡°ÈÕÍ·ÕæµÄ¶¾À×¶¾À×°¡£¬Â³É±ÄÇô¼¦ºÃ¿ßÁËô£¿ÎÒҪȥÊдò½±À­£¬¹«ÆÅÄã¾Í×Ô¼º×öÀ­£¬ÎÒ×òÌìÃÎÁ˸ö´óÍ·½±£¬ÈýÍ·Áùβ¶þÎåÖжǣ¬ÎÒÒª´ò¶þÊ®¿éÀ­¡±

1 ×ö¶¬Ñ©ÊǺ£ÄϵÄʲô½ÚÈÕ

A À°Ô B ¶ËÎç C ÇåÃ÷ D ¶¬ÖÁ¡¡

2 ÈÕÍ·¶¾À×¶¾À×µÄÒâ˼ÊÇ

A¸É»îºÜÀÛ B ³öÌ«Ñô CºÜÈÈ D ³ö´óÌ«ÑôÓÖÈÈÓÖɹ

3 ¡°¹«ÆÅÄã¾Í×Ô¼º×ö¡±µÄÒâ˼ÊÇA ¸øÒ¯Ò¯ÄÌÄÌ×ö·¹ Bµ±ºÃ¼Ò³¤ C×Ô¼ºÒ»¸öÈ˰Ý׿ÏÈ D ½ÐÒ¯Ò¯ÄÌÄ̳Է¹¡¡

4 °¡¹·ÕâÆÚÒª´òµÄ½±ÊÇ¡¡

A 3526 B 3562 C 2365 D 3256?<wbr>?<wbr>?<wbr>?<wbr>?<wbr>?<wbr>?<wbr>?<wbr>?<wbr>?<wbr>

5 ¡°ÎÒÒª´ò20¿éµÄ½±¡±´òµÄÒâ˼ÊÇ¡¡

A¶¯´Ê´òÈ˵ÄÒâ˼ BÂòµÄÒâ˼ CÓïÆøÖú´ÊÎÞÒâ D Ãû´Ê»îÓÃΪ¶¯´Ê¡¡

¶þ

Ò»¸öÄêÇáá̲ȹ·á̵½ÏçÏÂÃÔ·ÁË£¬Ëû¿´µ½Â·±ßÓÐÒ»¸öÀϲ®µùÔÚÒ¬×ÓÊ÷ÏÂ˯¾õ.ÄêÇáá̾ÍÎÊ¡°²®µù°¡£¬ÄãÔÚ×öʲô¡± ²®µù»Ø´ð ¡°ÑøÅ£Ã»¼ûÂ𣿡± ÄêÇááÌÓÖÎÊ ¡°ÌïÍ·ÔõôÑùÈ¥Áù£¿¡±²®µù»Ø´ð¡°ÄãÖ±Ö±¿ª£¬¿´µ½Ò»¸öÆÌáÌÁ˾ÍÍùÓÒ¿ª£¬ÔÙ¿ªµ½¿´µ½Ò»¸ö¾®Í·¾Íµ½ÁË¡±

1 ÄêÇááÌÊÇÄÄÀïÈË

A ¶¨°² Bº£¿Ú C Çíº£ D ÈýÑÇ

2 ²®µùÊÇÄÄÀïÈË

A ¶¨°² Bº£¿Ú C Çíº£ D ÈýÑÇ

3 ÔÚ±¾ÎÄÖÐÆÌá̵ÄÒâ˼ÊÇ

A µØÃû BСÂô²¿ C Ò»¸öÈ˵ÄÃû×Ö D Ò»ÖÖ½»Í¨¹¤¾ß

4 ¾®Í·µÄÒâ˼ÊÇ

AË®¹Ü BË®ÁúÍ· CË®Ëþ D Ë®¾®

5 ÄêÇáá̲ȹ·áÌ..µÄ¹·á̵ÄÒâ˼ÊÇ

AС¹· B ÔËС¹· CÒ»ÖÖºÜÀÃµÄÆû³µ D Ò»ÖÖºÜÀõÄĦÍгµ

Èý

°¡¹·µÄ¸Â´µÉϳ¤ÁËÒ»¸ö´ó¾ÆÍᣬËû×øÈý½Å¼¦È¥Ò½Ôº¿´Ò½Éú£¡°¡¹·ÎÊÒ½Éú£¬¸Â´µÉϳ¤Á˸ö´ó¾ÆÍáÔõô×ö°¡£¬»á²»»á¹ý¸øÎÒÀÏÆÅ°¡?Ò½Éú˵:"¸Â´µÉϳ¤ÅÂʲô£¬²»³¤Ôڸ´µ¿µÀï¾Í²»Å£¡"

1 ¸Â´µÔÚµÄÒâ˼ÊÇ

AÊÖ B ½Å C ƨ¹É D Í·

2 ¸Â´µ¿µµÄÒâ˼ÊÇ

AÊÖÍó B ½ÅÍó C ¸ØÃÅ D Í··¢

3 Èý½Å¼¦µÄÒâ˼ÊÇ

AÈýÖ»½ÅµÄ¼¦ BÆû³µ C×ÔÐгµ D Å©ÓÃÈýÂÖ³µ

4 ´ó¾ÆÍáÊÇʲô

A ´ó¾Æ±­ B ºÈ¾Æ×íÁË C ´óƿơ¾Æ D Ƥ·ô²¡

5 »á²»»á¹ý¸øÎÒÀÏÆÅ ÖеĹýµÄÒâ˼ÊÇ

AÅÜ B´«È¾ C´ò D ÌÛ

ËÄ

°¡¹·¿ª³µ¿ÇÈ¥Íø°ÉѹÇò£¬ËûÀÏÆÅ´òµç»°À´ÎÊ¡°²¨¹·°¡£¬ÄãÔÚ×öÃܰ¡¡±¡°Ã»×öÃܰ¡£¬ÎÒÔÚ¸çµÜ¼Ò×öÁî°¡¡±°¡¹·»Ø´ð¡°ÄÇÄãÔçµã»ØÀ´°¡...¡±

1 ¿ª³µ¿ÇÒâ˼ÊÇ

A ¿ªÅܳµ B ¿ªÄ¦Íгµ C ¿ªÆ´×°³µ D¿ªÆ´×°contraband³µ

2 ѹÇòÒâ˼ÊÇ

A ¶ÂÇò B ´òÇò C ¿´Çò DÍæ×ãÇòÓÎÏ·

3 ×öÃܵÄÒâ˼ÊÇ¡¡

A ¸Éʲô B È¥ÄÄÀï C ¿´Ê²Ã´ D ÍæÊ²Ã´

4 ¸çµÜµÄÒâ˼

A ÐÖµÜ B ͬÊ C Ò»°ãÅóÓÑ D ͬѧ

5 ×öÁîµÄÒâ˼ÊÇ

¡¡A ´òÆË¿Ë B ´òÅÆ C´òÅÆ¾Å D´òÂ齫

Èý µ¥ÏîÑ¡Ôñ 10·Ö¡¡

1 º£ÄÏ»°·¢Ô´ÓÚʲô»°

AÃöÄÏ»° BÔÁÓï CÆÕͨ»° D¿Í¼Ò¡¡

2 º£ÄÏ»°µÄ·¢ÒôÌØµã²¿Î»ÊÇ¡¡¡¡

AСÉà B ÐØÇ» C ±Ç D ÇÌÉà¡¡

3 È¥Êп´Âó ÂóµÄÒâ˼ÊÇ¡¡

A Å®ÈË B Å®º¢ CƯÁÁÅ®º¢ DÀÏÅ®ÈË¡¡¡¡

4 ÅÁ³µ× Ö±Òë¹ýÀ´¾ÍÊÇ¡°´òÄãËÀ¡°Õâ¾ä»°ÊÇ¡¡

A ±öÓïǰÖà B¶¨ÓïºóÖà C±öÓïºóÖà D¶¨ÓïǰÖÃ

5 ¡°·¬¶¹ÌǷ⡱Òâ˼ÊÇ

A ³´¶¹×Ó B ³´»¨Éú C »¨ÉúÌÇ D ÃÞ»¨ÌÇ

ËÄ ·­ÒëÌâ 10 ·Ö

º£ÒëÆÕ

1 Í߸Õ³¹¯£¬Â³Ã´¸Â´µÕæ´ó£¡

2 ô½±ÖоÍÊÇÊǹ»Á¦£¡×ö×ÅÍ·½±À­£¡

ÆÕÒ뺣

3 ÈÕ±¾ÈËÕæ²»ÊǶ«Î÷

4 JJÔÚץĦÍÐ

Îå ×÷ÎÄ 20

Óú£Äϵط½·½ÑÔдһ¼þÈÃÄãÌØ±ð¸ßÐ˵ÄÖÕÉúÄÑÍüµÄÊ£¬ÀýÈçÀÏÆÅÉúÁ˹«µùáÌ£¬ÖÐÁË50¿é¶¨Î»ÒÔ¼°¹ýÁËÆßÁª£¬µÈµÈ£¡

ÒªÇó×ÖÊýÒª200×Ö£¬ÄÚÈݽ¡¿µÏòÉÏ£¬·´Ó³º£ÄÏÈË¿ìÐÒ¸£µÄÉú»î£¡ÌâÄ¿×ÔÄ⣡

?

º£ÄÏ»°¿¼ÊÔ(B¾í)

µ¥ÏîÑ¡Ôñ(10·Ö)

¡¡¡¡Ò»£®°ëÖ´¹ÌÊÇʲôÒâ˼£¿1£¬ºÜ´ÏÃ÷ 2£¬ºÜÀ÷º¦ 3£¬ºÜËÀ°å 4£¬ºÜƯÁÁ

¡¡¡¡¶þ£®Âä¹ÄÊÇʲô¶«Î÷£¿1£¬´ò»÷ÀÖÆ÷ 2£¬¸ßÑÅÒÕÊõ 3£¬Ãñ¼ä´«Ëµ 4£¬ÄÔÓÐÎÊÌâ

¡¡¡¡Èý£®¾ÅËá¿´¼ûÒ»¸ö¾ÅËᣬ½²£º¡°ßÞѽ£¬Â³±ÈÎÒÑø¾ÅËᣡ¡±ÇëÎʾÅËáΪºÎÎ

¡¡¡¡ 1£¬Éµ×Ó 2£¬ÎÄä 3£¬Ð¡ÈË 4£¬ºï×Ó

¡¡¡¡ËÄ£®°¡¹·Ã´Å£µùÊÒÆÅ¸öв¿Íâ¼Òô¹ÃÇ¿¸ö¹öÉó¸öԲǿ×Ó¶ÔËê¡£ÎÄÕÂÀï³öÏÖÁ˼¸¸öÈË£¿

¡¡¡¡ 1£¬4¸ö 2£¬5¸ö 3£¬6¸ö 4£¬7¸ö

¡¡¡¡Î壮¡°ßÞѽ£¬ÄãôС×ÐʺҲÀ´ÉÜÄÎÒÁù´ò³ô¼ô´µ±Ê¸ç£¡¡±¼ô´µÎªºÎÒ⣿

¡¡¡¡ 1£¬Àí·¢ 2£¬´µÅ£ 3£¬³Ô·¹ 4£¬PP

¡¡¡¡ÔĶÁÀí½â(40·Ö)

¡¡¡¡Ò»£® ¼×£º¡°Â³Á½¸öÈ¥´¦Á´ò½±ÎÞÁ¡±ÒÒ£º¡°ÎÒÄÜÎÞÈ¥¡£¡±±û£º¡°ÎÞÏà¸É£¬³öÀÏÀñÌóԲ衣¡±

¡¡¡¡£¨1£© ¼×ÊÇÄÄÀïÈË£¿ 1£¬º£¿Ú 2£¬ÎIJý 3£¬Çíº£ 4£¬¶¨°²

¡¡¡¡£¨2£© ÒÒÊÇÄÄÀïÈË£¿ 1£¬º£¿Ú 2£¬ÎIJý 3£¬Çíº£ 4£¬¶¨°²

¡¡¡¡£¨3£© ±ûÊÇÄÄÀïÈË£¿ 1£¬º£¿Ú 2£¬ÎIJý 3£¬Çíº£ 4£¬¶¨°²

¡¡¡¡£¨4£© ÈýÈËÏÖÔÚÔÚÄÄÀï? 1£¬º£¿Ú 2£¬ÍͲý 3£¬Çíº£ 4£¬¶¨°²

¡¡¡¡¶þ£® °¡ÊݸոçµÜÈ¥º£¿Ú¼¦·Åʺ·Ðдң¬°¡Ã´Æ¤Õ³½²£º¡°°¡ÊåÒ©´øÎÞ£¿¡±Ëû½²£º¡°Õâ¿ÕÕæÊÇÏÕÏÌ´øÀ²£¬ÎÞÖªÓÐζÎÞßÖ£¿¡±¸çµÜ½²£º¡°ÎÞÓÃÂò£¬Ì̶àßä×ÜÊÇɬʺ¸ö£¬Î޺ÿ´ÎÞÏÊ¡£¡±

¡¡¡¡(1) °¡ÊÝÏÖÔں䦣¿A£®½â·Å¶«Â· B.½â·ÅÎ÷· C.½â·ÅÄÏ· D.½â·Å±±Â·

¡¡¡¡(2) ËûÓöµ½Ê²Ã´ÈË£¿A£®Ç¿µÁ B.Æ­×Ó C.³Ç¹Ü D.С··

¡¡¡¡(3) ËûÒªÂòʲô£¿A£®º£´ø B.ÏÌÓã C.´ÅÅÌ D.ÒûÁÏ

¡¡¡¡(4) ¸çµÜʲôÒâ¼û£¿A.²»ºÃ³Ô B.²»ºÃ¿´ C.Ì«¹ó D.ÅÂÊÜÆ­

¡¡¡¡Èý£¬¼×£º¡°ßÞѽ£¬ÔÚÕâ¹ù¿­ôÎôµ¨Ì̴󣿡±ÒÒ£º¡°ÎÒÁùÄó·ôÄѶäÁ÷Ë®¸ç°¡Å£¡¡±

¡¡¡¡¼×£º¡°Îҽзôţµù´ò³£¡¡±ÒÒ£º¡°Ã¨Ã´Å£µù×öׯÌ̹ùÌÌ£¡¡±

¡¡¡¡(1) ¿­ôÎÊÇʲôÒâ˼£¿A.³ÔÃæB.´ò¼ÜC.·¿ÊÂD.³³¼Ü

¡¡¡¡(2) ÄѶäÊÇʲô¶«Î÷£¿A.Ò»ÖÖ»¨B.ÒÕÊõÆ·C.ÉúÖ³Æ÷D.µØ·½Ãû

¡¡¡¡(3) Å£µùÊÇË­£¿A.°Ö°ÖB.ÊåÊåC.¾Ë¾ËD.Ò¯Ò¯

¡¡¡¡(4) Å£µùÔÚ×öʲô£¿A.˯¾õB.×ö·¹C.Ï´ÔèD.´òÂ齫

¡¡¡¡·­Òë(10·Ö)

¡¡¡¡1. ³ôÈËÎÞÊÇßä,·ÅÊ»ÎÞÆß¼ô´µ!

¡¡¡¡2. ³Ô²è,½ïÆÚÖжǺÏßä,ͬÉÏ´òßäÊý?

¡¡¡¡3. ÎÞÓòñËûôţÂð!

¡¡¡¡4. ßäßäËþ,ÎÒÁùÍÆÂ³Â乫·¿¿Õ¸ç.

¡¡¡¡5. ôÈýÍÁ×ÓÕæÊÇÊÇÏñÑùÀ²!

¡¡¡¡Ãû´Ê½âÊÍ(40·Ö)

¡¡¡¡??£¨º£ÄÏ»°ÒëÆÕͨ»°£©

??????1. Òò×Ðβ

¡¡?? 2??¼ÓÃÀ

¡¡?? 3??Ò§´å

¡¡?? 4. Âä¹ÄÂä¼¼??

??

??????????£¨ÆÕͨ»°Ò뺣ÄÏ»°£©

??????5??ÃÀÅ®°¡£¡È¥¹ä½ÖÂð£¿

??????6??ÄÇÀïµÄÒ¹ÏüºÃ³Ô°¡£¿

??????7??¸Éʲô£¿¸Éʲô£¿Ïë´ò¼ÜÂð£¿

??????8??ÄãÂèÂèºÍÄã°Ö°Ö¡£

b.gif

#include "sys.h" #include "delay.h" #include "usart.h" #include "includes.h" #include "led.h" /************************************************ ALIENTEK &frac34;«Ó¢°æSTM32¿ª·¢°åUCOSʵÑé Àý6-1 UCOSIII ÈÎÎñ´´½¨ÓÚÉ&frac34;&sup3;ý ¼¼ÊõÖ§&sup3;Ö£ºwww.openedv.com ÌÔ±¦µêÆÌ£ºhttp://eboard.taobao.com ¹Ø×¢Î¢ÐŹ«ÖÚÆ½Ì¨Î¢Ðźţº"ÕýµãÔ­×Ó"£¬Ãâ·Ñ»ñÈ¡STM32×ÊÁÏ¡£ ¹ãÖÝÊÐÐÇÒíµç×ӿƼ¼ÓÐÏÞ¹«Ë&frac34; ×÷ÕߣºÕýµãÔ­×Ó @ALIENTEK ************************************************/ //UCOSIIIÖÐÒÔÏÂÓÅÏȼ¶Óû§&sup3;ÌÐò²»ÄÜʹÓã¬ALIENTEK //½«ÕâЩÓÅÏȼ¶·ÖÅ䏸ÁËUCOSIIIµÄ5¸öϵÍ&sup3;ÄÚ²¿ÈÎÎñ //ÓÅÏȼ¶0£ºÖжϷþÎñ·þÎñ¹ÜÀíÈÎÎñ OS_IntQTask() //ÓÅÏȼ¶1£ºÊ±ÖÓ½ÚÅÄÈÎÎñ OS_TickTask() //ÓÅÏȼ¶2£º¶¨Ê±ÈÎÎñ OS_TmrTask() //ÓÅÏȼ¶OS_CFG_PRIO_MAX-2£ºÍ&sup3;¼ÆÈÎÎñ OS_StatTask() //ÓÅÏȼ¶OS_CFG_PRIO_MAX-1£º¿ÕÏÐÈÎÎñ OS_IdleTask() /* ΪÁËʵÏÖÁÙ½çÇøµÄ±£»¤£¬UCOSIIIÌṩÁËÁ½¸öºê£ºOS_CRITICAL_ENTER() ºÍOS_CRITICAL_EXIT()¡£ µ±Ò»¸öÈÎÎñ»òÖжϽøÈëÁÙ½çÇøÊ±£¬Ëü±ØÐëµ÷ÓÃOS_CRITICAL_ENTER()ºêÒÔ»ñµÃÁÙ½çÇøµÄ±£»¤¡£ Õâ¸öºê½«½ûÓÃÖжϣ¬ÒÔÈ·±£Ö´ÐÐÁÙ½çÇøµÄ´úÂë²»»á±»ÖжϻòÇÀÕ¼£¬´Ó¶ø±£Ö¤ÁËÁÙ½çÇøµÄÔ­×ÓÐÔ¡£ µ±´úÂëÖ´ÐÐÍê±Ïʱ£¬ÈÎÎñ»òÖжϱØÐëµ÷ÓÃOS_CRITICAL_EXIT()ºêÀ´»Ö¸´Öжϣ¬ÒÔ±ãÆäËûÈÎÎñºÍÖжϿÉÒÔ·ÃÎʹ²Ïí×ÊÔ´²¢Ö´ÐÐËüÃǵĴúÂë¡£ ʹÓÃOS_CRITICAL_ENTER()ºÍOS_CRITICAL_EXIT()ºêÀ´±£»¤ÁÙ½çÇø£¬ ÄÇôÔÚÈÎÎñT1Ö´ÐеÄÕû¸öʱ¼äÄÚ£¬ÖжϽ«±»½ûÓ㬠ÆäËûÈÎÎñ½«²»ÄÜ·ÃÎʹ²Ïí×ÊÔ´²¢ÇÒÁÙ½çÇøµÄ´úÂ뽫ÒÔÔ­×Ó·½Ê½Ö´ÐÐÍê±Ï¡£ ÕâÑù¿ÉÒÔÈ·±£ÁÙ½çÇø´úÂëµÄÕýÈ·ÐÔ£¬±ÜÃâ&frac34;ºÕùÌõ¼þºÍÆäËûͬ²½ÎÊÌâ¡£ */ /* ÔÚUCOS IIIÖУ¬ÈÎÎñµÄÖ´ÐÐË&sup3;ÐòÊÇ»ùÓÚÓÅÏȼ¶µ÷¶ÈËã·¨¡£ ÿ¸öÈÎÎñ¶¼ÓÐÒ»¸öÓÅÏȼ¶£¨0µ½255£©£¬&frac34;ßÓиü¸ßÓÅÏȼ¶µÄÈÎÎñ±ÈµÍÓÅÏȼ¶µÄÈÎÎñ¸ü¿ÉÄܵõ½µ÷¶È¡£ UCOS IIIʹÓÃÇÀռʽµ÷¶È£¬ÕâÒâζ×ŵ±ÓÐÒ»¸ö¸ßÓÅÏȼ¶µÄÈÎÎñ&frac34;ÍÐ÷ʱ£¬µ±Ç°ÕýÔÚÖ´ÐеÄÈÎÎñ½«±»Öжϲ¢ÇÒ¸ßÓÅÏȼ¶ÈÎÎñ½«±»Ö´ÐС£ ÕâÈ·±£ÁË&frac34;ßÓиü¸ßÓÅÏȼ¶µÄÈÎÎñ¿ÉÒÔ¼°Ê±»ñµÃÖ´ÐУ¬±ÜÃâ&sup3;¤Ê±¼ä±»µÍÓÅÏȼ¶ÈÎÎñÕ¼Óô¦ÀíÆ÷µÄÇé¿ö·¢Éú¡£ UCOS IIIÈÎÎñµÄÖ´ÐÐÊÇͨ¹ýÉÏÏÂÎÄÇл»ÊµÏֵġ£ ÉÏÏÂÎÄÇл»ÊÇÖ¸½«´¦ÀíÆ÷µÄ״̬´ÓÒ»¸öÈÎÎñ±£´æµ½Äڴ棬Ȼºó½«ÁíÒ»¸öÈÎÎñµÄ×´Ì¬×°ÔØµ½´¦ÀíÆ÷ÖУ¬ÒÔÔÚ²»¼ä¶ÏµÄÇé¿öÏÂת»»ÈÎÎñÖ´ÐС£ µ±Ò»¸öÈÎÎñÐèÒª±»ÖÐֹʱ£¬¼´Ö´ÐÐOS_TaskSuspend()º¯Êýʱ£¬UCOS III´¦ÀíÆ÷»áÖ´ÐÐÒ»¸öÈÎÎñÇл»Öжϲ¢½«¿ØÖÆÈ¨×ªÒƵ½ÁíÒ»¸öÈÎÎñ¡£ ÈÎÎñÇл»Í¨&sup3;£·¢ÉúÔÚÒÔÏÂÇé¿öÏ£º µ±ÈÎÎñÖ÷¶¯µ÷ÓÃÁËÈÎÎñ¿ØÖƺ¯Êý£¨ÀýÈ磬OS_Delay()¡¢OS_EventWait()¡¢OS_TaskSuspend()µÈ£©²¢ÍËÈÃCPUʱ£» µ±Ä&sup3;¸öÖжϷþÎñ&sup3;ÌÐò(ISR)ÔڹؼüÈÎÎñÖ´ÐÐÆÚ¼äÖ´ÐУ¨¼´ÖжÏÓÅÏȼ¶¸ßÓڹؼüÈÎÎñµÄÓÅÏȼ¶£©¡£ */ //¿ªÊ¼ÈÎÎñ£¬´´½¨ÍêÈÎÎñ¶þºÍÈÎÎñÈý&frac34;ÍÉ&frac34;&sup3;ý×Ô¼º //ÈÎÎñÓÅÏȼ¶ #define START_TASK_PRIO 3 //ÈÎÎñ¶ÑÕ»´óС #define START_STK_SIZE 128 //ÈÎÎñ¿ØÖÆ¿é OS_TCB StartTaskTCB; //ÈÎÎñ¶ÑÕ» CPU_STK START_TASK_STK[START_STK_SIZE]; //ÈÎÎñº¯Êý void start_task(void *p_arg); ///ÈÎÎñ¶þÁÁµÆ£¬²¢´òÓ¡&sup3;öÐÅÏ¢ //ÈÎÎñÓÅÏȼ¶ #define TASK1_TASK_PRIO 4 //ÈÎÎñ¶ÑÕ»´óС #define TASK1_STK_SIZE 128 //ÈÎÎñ¿ØÖÆ¿é OS_TCB Task1_TaskTCB; //ÈÎÎñ¶ÑÕ» CPU_STK TASK1_TASK_STK[TASK1_STK_SIZE]; void task1_task(void *p_arg); ///ÈÎÎñÈý£¬´òÓ¡ÈÎÎñÈýÖ´ÐÐÐÅÏ¢ //ÈÎÎñÓÅÏȼ¶ #define TASK2_TASK_PRIO 5 //ÈÎÎñ¶ÑÕ»´óС #define TASK2_STK_SIZE 128 //ÈÎÎñ¿ØÖÆ¿é OS_TCB Task2_TaskTCB; //ÈÎÎñ¶ÑÕ» CPU_STK TASK2_TASK_STK[TASK2_STK_SIZE]; //ÈÎÎñº¯Êý void task2_task(void *p_arg); volatile u8 key_pressed = 0; volatile u8 current_task = 1; void KEY_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; // ???? GPIO_Init(GPIOA, &GPIO_InitStructure); } void Key_Scan(void) { static u8 key_up = 1; if (key_up && GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)) { delay_ms(20); // ?? if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)) { key_up = 0; key_pressed = 1; // ?????? } } else if (!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)) { key_up = 1; } } //Ö÷º¯Êý int main(void) { OS_ERR err; CPU_SR_ALLOC(); SystemInit();//ÓÉÓÚ±&frac34;¹¤&sup3;ÌÊÇÓÉstm32f103zet6ÒÆÖ²ËùÀ´£¬Òò´ËÕâÀïÒò¼ÓÈë±&frac34;º¯ÊýÈ·±£delayº¯ÊýÕý&sup3;£Ê¹Óà delay_init(); //ʱÖÓ&sup3;õʼ»¯ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//ÖжϷÖ×éÅäÖà uart_init(115200); //´®¿Ú&sup3;õʼ»¯ LED_Init(); KEY_Init(); // ??????? OSInit(&err); //&sup3;õʼ»¯UCOSIII OS_CRITICAL_ENTER(); //½øÈëÁÙ½çÇø //´´½¨¿ªÊ¼ÈÎÎñ OSTaskCreate((OS_TCB * )&StartTaskTCB, //ÈÎÎñ¿ØÖÆ¿é (CPU_CHAR * )"start task", //ÈÎÎñÃû×Ö (OS_TASK_PTR )start_task, //ÈÎÎñº¯Êý (void * )0, //´«µÝ¸øÈÎÎñº¯ÊýµÄ²ÎÊý (OS_PRIO )START_TASK_PRIO, //ÈÎÎñÓÅÏȼ¶ (CPU_STK * )&START_TASK_STK[0], //ÈÎÎñ¶ÑÕ»»ùµØÖ· (CPU_STK_SIZE)START_STK_SIZE/10, //ÈÎÎñ¶ÑÕ»Éî¶ÈÏÞλ (CPU_STK_SIZE)START_STK_SIZE, //ÈÎÎñ¶ÑÕ»´óС (OS_MSG_QTY )0, //ÈÎÎñÄÚ²¿ÏûÏ¢¶ÓÁÐÄܹ»½ÓÊÕµÄ×î´óÏûÏ¢ÊýÄ¿,Ϊ0ʱ½ûÖ¹½ÓÊÕÏûÏ¢ (OS_TICK )0, //µ±Ê¹ÄÜʱ¼äƬÂÖתʱµÄʱ¼äƬ&sup3;¤¶È£¬Îª0ʱΪĬÈÏ&sup3;¤¶È£¬ (void * )0, //Óû§²¹&sup3;äµÄ´æ´¢Çø (OS_OPT )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR, //ÈÎÎñÑ¡Ïî (OS_ERR * )&err); //´æ·Å¸Ãº¯Êý´íÎóʱµÄ·µ»ØÖµ OS_CRITICAL_EXIT(); //ÍË&sup3;öÁÙ½çÇø OSStart(&err); //¿ªÆôUCOSIII } //¿ªÊ¼ÈÎÎñÈÎÎñº¯Êý void start_task(void *p_arg) { OS_ERR err; CPU_SR_ALLOC(); p_arg = p_arg; CPU_Init(); #if OS_CFG_STAT_TASK_EN > 0u OSStatTaskCPUUsageInit(&err); //Í&sup3;¼ÆÈÎÎñ #endif #ifdef CPU_CFG_INT_DIS_MEAS_EN //Èç¹ûʹÄÜÁ˲âÁ¿ÖжϹرÕʱ¼ä CPU_IntDisMeasMaxCurReset(); #endif #if OS_CFG_SCHED_ROUND_ROBIN_EN //µ±Ê¹ÓÃʱ¼äƬÂÖתµÄʱºò //ʹÄÜʱ¼äƬÂÖתµ÷¶È¹¦ÄÜ,ʱ¼äƬ&sup3;¤¶ÈΪ1¸öϵÍ&sup3;ʱÖÓ½ÚÅÄ£¬¼È1*5=5ms OSSchedRoundRobinCfg(DEF_ENABLED,1,&err); #endif OS_CRITICAL_ENTER(); //½øÈëÁÙ½çÇø //´´½¨TASK1ÈÎÎñ OSTaskCreate((OS_TCB * )&Task1_TaskTCB, (CPU_CHAR * )"Task1 task", (OS_TASK_PTR )task1_task, (void * )0, (OS_PRIO )TASK1_TASK_PRIO, (CPU_STK * )&TASK1_TASK_STK[0], (CPU_STK_SIZE)TASK1_STK_SIZE/10, (CPU_STK_SIZE)TASK1_STK_SIZE, (OS_MSG_QTY )0, (OS_TICK )0, (void * )0, (OS_OPT )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR, (OS_ERR * )&err); //´´½¨TASK2ÈÎÎñ OSTaskCreate((OS_TCB * )&Task2_TaskTCB, (CPU_CHAR * )"task2 task", (OS_TASK_PTR )task2_task, (void * )0, (OS_PRIO )TASK2_TASK_PRIO, (CPU_STK * )&TASK2_TASK_STK[0], (CPU_STK_SIZE)TASK2_STK_SIZE/10, (CPU_STK_SIZE)TASK2_STK_SIZE, (OS_MSG_QTY )0, (OS_TICK )0, (void * )0, (OS_OPT )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR, (OS_ERR * )&err); OS_CRITICAL_EXIT(); //ÍË&sup3;öÁÙ½çÇø OSTaskDel((OS_TCB*)0,&err); //É&frac34;&sup3;ýstart_taskÈÎÎñ×ÔÉí } // ??1:??PB0(LED0) void task1_task(void *p_arg) { OS_ERR err; while (1) { Key_Scan(); if (key_pressed) { current_task = 2; // ?????2 key_pressed = 0; printf("Switch to Task2\n"); } else { // LED0?? GPIO_SetBits(GPIOB, GPIO_Pin_0); // LED0? OSTimeDlyHMSM(0, 0, 0, 5000, OS_OPT_TIME_HMSM_STRICT, &err); // 500ms GPIO_ResetBits(GPIOB, GPIO_Pin_0); // LED0? OSTimeDlyHMSM(0, 0, 0, 5000, OS_OPT_TIME_HMSM_STRICT, &err); // 500ms } } } void task2_task(void *p_arg) { OS_ERR err; while (1) { Key_Scan(); if (key_pressed) { current_task = 1; // ?????1 key_pressed = 0; printf("Switch back to Task1\n"); } else { // ????2??? // ??:LED1?? GPIO_SetBits(GPIOB, GPIO_Pin_1); // LED1? OSTimeDlyHMSM(0, 0, 0, 5000, OS_OPT_TIME_HMSM_STRICT, &err); // 500ms GPIO_ResetBits(GPIOB, GPIO_Pin_1); // LED1? OSTimeDlyHMSM(0, 0, 0, 5000, OS_OPT_TIME_HMSM_STRICT, &err); // 500ms } } }我现在需要刚开始时B0(任务一)LED闪烁,当按下按键后(A0)给予信息量,使得代码进入(任务二),再次摁下按键,两个任务均不执行
06-06
#include <reg52.h> //°üº¬51µ¥Æ¬»úÏà¹ØµÄÍ·Îļþ #include <intrins.h> #define uint unsigned int //ÖØ¶¨ÒåÎÞ·ûºÅÕûÊýÀàÐÍ #define uchar unsigned char //ÖØ¶¨ÒåÎÞ·ûºÅ×Ö·ûÀàÐÍ uchar code LedShowData[]={0x03,0x9F,0x25,0x0D,0x99, //¶¨ÒåÊýÂë¹ÜÏÔÊ&frac34;Êý&frac34;Ý 0x49,0x41,0x1F,0x01,0x19};//0,1,2,3,4,5,6,7,8,9 uchar code RecvData[]={0x19,0x46,0x15,0x44,0x43,0x40,0x0D,0x0E,0x00,0x0F}; uchar IRCOM[7]; static unsigned int LedFlash; //¶¨ÒåÉÁ¶¯ÆµÂʼÆÊý±äÁ¿ unsigned char RunFlag=0; //¶¨ÒåÔËÐбêÖ&frac34;λ bit EnableLight=0; //¶¨ÒåÖ¸Ê&frac34;µÆÊ¹ÄÜλ /*************Íê&sup3;É״ָ̬Ê&frac34;µÆ¶¨Òå*************/ sbit S1=P3^2; //¶¨ÒåS1°´¼ü¶Ë¿Ú /*************Íê&sup3;ɵç»ú¿ØÖƶ˿ڶ¨Òå***********/ sbit M1A=P1^2; //¶¨Òåµç»ú1ÕýÏò¶Ë¿Ú sbit M1B=P1^3; //¶¨Òåµç»ú1·´Ïò¶Ë¿Ú sbit M2A=P1^4; //¶¨Òåµç»ú2ÕýÏò¶Ë¿Ú sbit M2B=P1^5; //¶¨Òåµç»ú2·´Ïò¶Ë¿Ú sbit IRIN=P3^3; //¶¨ÒåºìÍâ½ÓÊÕ¶Ë¿Ú /*********Íê&sup3;ɺìÍâ½ÓÊն˿ڵ͍Òå*************/ #define ShowPort P0 //¶¨ÒåÊýÂë¹ÜÏÔÊ&frac34;¶Ë¿Ú extern void ControlCar(uchar CarType); //ÉùÃ÷С&sup3;µ¿ØÖÆ×Ó&sup3;ÌÐò void delayms(unsigned char x) //0.14mSÑÓʱ&sup3;ÌÐò { unsigned char i; //¶¨ÒåÁÙʱ±äÁ¿ while(x--) //ÑÓʱʱ¼äÑ­»· { for (i = 0; i<13; i++) {} //14mSÑÓʱ } } void Delay1ms(unsigned int i) { unsigned char j,k; do{ j = 10; do{ k = 50; do{ _nop_(); }while(--k); }while(--j); }while(--i); } void Delay() //¶¨ÒåÑÓʱ×Ó&sup3;ÌÐò { uint DelayTime=30000; //¶¨ÒåÑÓʱʱ¼ä±äÁ¿ while(DelayTime--); //¿ªÊ¼½øÐÐÑÓʱѭ»· return; //×Ó&sup3;ÌÐò·µ»Ø } void tingzhi() { M1A=0; //½«M1µç»úA¶Ë&sup3;õʼ»¯Îª0 M1B=0; //½«M1µç»úB¶Ë&sup3;õʼ»¯Îª0 M2A=0; //½«M2µç»úA¶Ë&sup3;õʼ»¯Îª0 M2B=0; } void qianjin() { M1A=1; M1B=0; M2A=1; M2B=0; } void houtui() { M1A=0; M1B=1; M2A=0; M2B=1; } void youzhuan() { M1A=1; M1B=0; M2A=0; M2B=1; } void zuozhuan() { M1A=0; M1B=1; M2A=1; M2B=0; } void ControlCar(unsigned char ConType) //¶¨Òåµç»ú¿ØÖÆ×Ó&sup3;ÌÐò { tingzhi(); switch(ConType) //ÅжÏÓû§É趨µç»úÐÎʽ { case 1: //ǰ½ø //ÅжÏÓû§ÊÇ·ñÑ¡ÔñÐÎʽ1 { tingzhi(); //½øÈëǰ½øÖ®Ç° ÏÈÍ£Ö¹Ò»¶Îʱ¼ä ·ÀÖ¹µç»ú·´Ïòµçѹ&sup3;å»÷Ö÷°å µ¼ÖÂϵÍ&sup3;¸´Î» Delay1ms(240); qianjin(); ShowPort=LedShowData[1]; break; } case 2: //ºóÍË //ÅжÏÓû§ÊÇ·ñÑ¡ÔñÐÎʽ2 { tingzhi(); //½øÈëºóÍË֮ǰ ÏÈÍ£Ö¹Ò»¶Îʱ¼ä ·ÀÖ¹µç»ú·´Ïòµçѹ&sup3;å»÷Ö÷°å µ¼ÖÂϵÍ&sup3;¸´Î» Delay1ms(240); // LeftLed = 1 ; houtui(); ShowPort=LedShowData[2]; //M2µç»ú·´×ª break; } case 3: //×óת //ÅжÏÓû§ÊÇ·ñÑ¡ÔñÐÎʽ3 { tingzhi(); //½øÈë×óת֮ǰ ÏÈÍ£Ö¹Ò»¶Îʱ¼ä ·ÀÖ¹µç»ú·´Ïòµçѹ&sup3;å»÷Ö÷°å µ¼ÖÂϵÍ&sup3;¸´Î» Delay1ms(240); zuozhuan(); ShowPort=LedShowData[3]; //M2µç»úÕýת break; } case 4: //ÓÒת //ÅжÏÓû§ÊÇ·ñÑ¡ÔñÐÎʽ4 { tingzhi(); //½øÈëÓÒת֮ǰ ÏÈÍ£Ö¹Ò»¶Îʱ¼ä ·ÀÖ¹µç»ú·´Ïòµçѹ&sup3;å»÷Ö÷°å µ¼ÖÂϵÍ&sup3;¸´Î» Delay1ms(240); youzhuan(); //M1µç»úÕýת ShowPort=LedShowData[4]; //M2µç»ú·´×ª break; } case 5: //Í£Ö¹ //ÅжÏÓû§ÊÇ·ñÑ¡ÔñÐÎʽ8 { tingzhi(); ShowPort=LedShowData[0]; break; //ÍË&sup3;öµ±Ç°Ñ¡Ôñ } } } void IR_IN() interrupt 2 using 0 //¶¨ÒåINT2ÍⲿÖжϺ¯Êý { unsigned char j,k,N=0; //¶¨ÒåÁÙʱ½ÓÊÕ±äÁ¿ EX1 = 0; //¹Ø±ÕÍⲿÖжÏ,·ÀÖ¹ÔÙÓÐÐźŵ½´ï delayms(15); //ÑÓʱʱ¼ä£¬½øÐкìÍâÏû¶¶ if (IRIN==1) //ÅжϺìÍâÐźÅÊÇ·ñÏûʧ { EX1 =1; //ÍⲿÖжϿª return; //·µ»Ø } while (!IRIN) //µÈIR±äΪ¸ßµçƽ£¬Ìø¹ý9msµÄǰµ¼µÍµçƽÐźš£ { delayms(1); //ÑÓʱµÈ´ý } for (j=0;j<4;j++) //²É¼¯ºìÍâÒ£¿ØÆ÷Êý&frac34;Ý { for (k=0;k<8;k++) //·Ö´Î²É¼¯8λÊý&frac34;Ý { while (IRIN) //µÈ IR ±äΪµÍµçƽ£¬Ìø¹ý4.5msµÄǰµ¼¸ßµçƽÐźš£ { delayms(1); //ÑÓʱµÈ´ý } while (!IRIN) //µÈ IR ±äΪ¸ßµçƽ { delayms(1); //ÑÓʱµÈ´ý } while (IRIN) //¼ÆËãIR¸ßµçƽʱ&sup3;¤ { delayms(1); //ÑÓʱµÈ´ý N++; //¼ÆÊýÆ÷¼Ó¼Ó if (N>=30) //ÅжϼÆÊýÆ÷ÀÛ¼ÓÖµ { EX1=1; //´ò¿ªÍⲿÖжϹ¦ÄÜ return; //·µ»Ø } } IRCOM[j]=IRCOM[j] >> 1; //½øÐÐÊý&frac34;ÝÎ»ÒÆ²Ù×÷²¢×Ô¶¯²¹Áã if (N>=8) //ÅжÏÊý&frac34;Ý&sup3;¤¶È { IRCOM[j] = IRCOM[j] | 0x80; //Êý&frac34;Ý×î¸ßλ²¹1 } N=0; //ÇåÁãλÊý¼ÆÂ¼Æ÷ } } if (IRCOM[2]!=~IRCOM[3]) //ÅжϵØÖ·ÂëÊÇ·ñÏàͬ { EX1=1; //´ò¿ªÍⲿÖÐ¶Ï return; //·µ»Ø } for(j=0;j<10;j++) //Ñ­»·½øÐмüÂë½âÎö { if(IRCOM[2]==RecvData[j]) //½øÐмüλ¶ÔÓ¦ { ControlCar(j); //ÊýÂë¹ÜÏÔÊ&frac34;ÏàÓ¦ÊýÂë } } EX1 = 1; //ÍⲿÖжϿª } void main(void) //Ö÷&sup3;ÌÐòÈë¿Ú { bit ExeFlag=0; //¶¨Òå¿ÉÖ´ÐÐλ±äÁ¿ LedFlash=3000; //¶ÔÉÁµÆÊý&frac34;ݽøÐÐ&sup3;õʼ»¯ EX1=1; //ͬÒ⿪ÆôÍⲿÖжÏ1 IT1=1; //É趨ÍⲿÖжÏ1ΪµÍ±ßÔµ´¥·¢ÀàÐÍ EA=1; //×ÜÖжϿªÆô ShowPort=LedShowData[0]; //ÊýÂë¹ÜÏÔÊ&frac34;Êý×Ö0 while(1) //&sup3;ÌÐòÖ÷Ñ­»· { Delay(); //ÑÓʱ // RunStopState=~RunStopState; //ÔËÐÐÖ¸Ê&frac34;µÆ×´Ì¬×ª±ä } }详细解释
06-01
#include "dcmi_ov2640.h" #include "dcmi_ov2640_cfg.h" DCMI_HandleTypeDef hdcmi; // DCMI&frac34;ä±ú DMA_HandleTypeDef DMA_Handle_dcmi; // DMA&frac34;ä±ú volatile uint8_t DCMI_FrameState = 0; // DCMI״̬±êÖ&frac34;£¬µ±Êý&frac34;ÝÖ¡´«ÊäÍê&sup3;Éʱ£¬»á±» HAL_DCMI_FrameEventCallback() Öжϻص÷º¯ÊýÖà 1 volatile uint8_t OV2640_FPS ; // Ö¡ÂÊ /************************************************************************************************* * º¯ Êý Ãû: HAL_DCMI_MspInit * Èë¿Ú²ÎÊý: hdcmi - DCMI_HandleTypeDef¶¨ÒåµÄ±äÁ¿£¬¼´±íÊ&frac34;¶¨ÒåµÄ DCMI &frac34;ä±ú * ·µ »Ø Öµ: ÎÞ * º¯Êý¹¦ÄÜ: &sup3;õʼ»¯ DCMI Òý½Å * ˵ Ã÷: ÎÞ *************************************************************************************************/ void HAL_DCMI_MspInit(DCMI_HandleTypeDef* hdcmi) { GPIO_InitTypeDef GPIO_InitStruct = {0}; if(hdcmi->Instance==DCMI) { __HAL_RCC_DCMI_CLK_ENABLE(); // ʹÄÜ DCMI ÍâÉèʱÖÓ __HAL_RCC_GPIOE_CLK_ENABLE(); // ʹÄÜÏàÓ¦µÄGPIOʱÖÓ __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOC_CLK_ENABLE(); __HAL_RCC_GPIOD_CLK_ENABLE(); __HAL_RCC_GPIOG_CLK_ENABLE(); GPIO_OV2640_PWDN_CLK_ENABLE; // ʹÄÜPWDN Òý½ÅµÄ GPIO ʱÖÓ /**************************************************************************** Êý&frac34;ÝÒý½Å ʱÖÓºÍͬ²½Òý½Å PH9 ------> DCMI_D0 PG9 ------> DCMI_VSYNC PH10 ------> DCMI_D1 PH8 ------> DCMI_HSYNC PH11 ------> DCMI_D2 PA6 ------> DCMI_PIXCLK PH12 ------> DCMI_D3 PH14 ------> DCMI_D4 SCCB ¿ØÖÆÒý½Å£¬&sup3;õʼ»¯ÔÚ camera_sccb.c Îļþ PD3 ------> DCMI_D5 PH7 ------> SCCB_SCL PE5 ------> DCMI_D6 PH13 ------> SCCB_SDA PE6 ------> DCMI_D7 µôµç¿ØÖÆÒý½Å PH15 ------> PWDN ******************************************************************************/ GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF13_DCMI; HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_6; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF13_DCMI; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF13_DCMI; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_PIN_3; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF13_DCMI; HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF13_DCMI; HAL_GPIO_Init(GPIOG, &GPIO_InitStruct); // &sup3;õʼ»¯ PWDN Òý½Å OV2640_PWDN_ON; // ¸ßµçƽ£¬½øÈëµôµçģʽ£¬ÉãÏñÍ·Í£Ö¹¹¤×÷£¬´Ëʱ¹¦ºÄ½µµ½×îµÍ GPIO_InitStruct.Pin = OV2640_PWDN_PIN; // PWDN Òý½Å GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // ÍÆÍìÊä&sup3;öģʽ GPIO_InitStruct.Pull = GPIO_PULLUP; // ÉÏÀ­ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; // Ëٶȵȼ¶µÍ HAL_GPIO_Init(OV2640_PWDN_PORT, &GPIO_InitStruct); // &sup3;õʼ»¯ } } /*************************************************************************************************************************************** * º¯ Êý Ãû: MX_DCMI_Init * * º¯Êý¹¦ÄÜ: ÅäÖÃDCMIÏà¹Ø²ÎÊý * * ˵ Ã÷: 8λÊý&frac34;Ýģʽ£¬È«Êý&frac34;Ý¡¢È«Ö¡²¶×½£¬¿ªÆôÖÐ¶Ï * *****************************************************************************************************************************************/ void MX_DCMI_Init(void) { hdcmi.Instance = DCMI; hdcmi.Init.SynchroMode = DCMI_SYNCHRO_HARDWARE; // Ó²¼þͬ²½Ä£Ê½£¬¼´Ê¹ÓÃÍⲿµÄVS¡¢HSÐźŽøÐÐͬ²½ hdcmi.Init.PCKPolarity = DCMI_PCKPOLARITY_RISING; // ÏñËØÊ±ÖÓÉÏÉýÑØÓÐЧ hdcmi.Init.VSPolarity = DCMI_VSPOLARITY_LOW; // VSµÍµçƽÓÐЧ hdcmi.Init.HSPolarity = DCMI_HSPOLARITY_LOW; // HSµÍµçƽÓÐЧ hdcmi.Init.CaptureRate = DCMI_CR_ALL_FRAME; // ²¶»ñµÈ¼¶£¬ÉèÖÃÿһ֡¶¼½øÐв¶»ñ hdcmi.Init.ExtendedDataMode = DCMI_EXTEND_DATA_8B; // 8λÊý&frac34;Ýģʽ hdcmi.Init.JPEGMode = DCMI_JPEG_DISABLE; // ²»Ê¹ÓÃDCMIµÄJPEGģʽ hdcmi.Init.ByteSelectMode = DCMI_BSM_ALL; // DCMI½Ó¿Ú²¶×½ËùÓÐÊý&frac34;Ý hdcmi.Init.ByteSelectStart = DCMI_OEBS_ODD; // Ñ¡Ôñ¿ªÊ¼×Ö½Ú£¬´Ó Ö¡/ÐÐ µÄµÚÒ»¸öÊý&frac34;Ý¿ªÊ¼²¶»ñ hdcmi.Init.LineSelectMode = DCMI_LSM_ALL; // ²¶»ñËùÓÐÐÐ hdcmi.Init.LineSelectStart = DCMI_OELS_ODD; // Ñ¡Ôñ¿ªÊ¼ÐÐ,ÔÚÖ¡¿ªÊ¼ºó²¶»ñµÚÒ»ÐÐ HAL_DCMI_Init(&hdcmi) ; HAL_NVIC_SetPriority(DCMI_IRQn, 0 ,5); // ÉèÖÃÖжÏÓÅÏȼ¶ HAL_NVIC_EnableIRQ(DCMI_IRQn); // ¿ªÆôDCMIÖÐ¶Ï //// ÔÚJPGģʽÏ£¬Ò»¶¨Òªµ¥¶ÀʹÄܸÃÖÐ¶Ï // __HAL_DCMI_ENABLE_IT(&hdcmi, DCMI_IT_FRAME); // ʹÄÜ FRAME ÖÐ¶Ï } /*************************************************************************************************************************************** * º¯ Êý Ãû: OV2640_DMA_Init * * º¯Êý¹¦ÄÜ: ÅäÖà DMA Ïà¹Ø²ÎÊý * * ˵ Ã÷: ʹÓõÄÊÇDMA2£¬ÍâÉèµ½´æ´¢Æ÷ģʽ¡¢Êý&frac34;Ýλ¿í32bit¡¢²¢¿ªÆôÖÐ¶Ï * *****************************************************************************************************************************************/ void OV2640_DMA_Init(void) { __HAL_RCC_DMA2_CLK_ENABLE(); // ʹÄÜDMA2ʱÖÓ DMA_Handle_dcmi.Instance = DMA2_Stream7; // DMA2Êý&frac34;ÝÁ÷7 DMA_Handle_dcmi.Init.Request = DMA_REQUEST_DCMI; // DMAÇëÇóÀ´×ÔDCMI DMA_Handle_dcmi.Init.Direction = DMA_PERIPH_TO_MEMORY; // ÍâÉèµ½´æ´¢Æ÷ģʽ DMA_Handle_dcmi.Init.PeriphInc = DMA_PINC_DISABLE; // ÍâÉèµØÖ·½ûÖ¹×ÔÔö DMA_Handle_dcmi.Init.MemInc = DMA_MINC_ENABLE; // ´æ´¢Æ÷µØÖ·×ÔÔö DMA_Handle_dcmi.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; // DCMIÊý&frac34;Ýλ¿í£¬32λ DMA_Handle_dcmi.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; // ´æ´¢Æ÷Êý&frac34;Ýλ¿í£¬32λ DMA_Handle_dcmi.Init.Mode = DMA_CIRCULAR; // Ñ­»·Ä£Ê½ DMA_Handle_dcmi.Init.Priority = DMA_PRIORITY_LOW; // ÓÅÏȼ¶µÍ DMA_Handle_dcmi.Init.FIFOMode = DMA_FIFOMODE_ENABLE; // ʹÄÜfifo DMA_Handle_dcmi.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; // È«fifoģʽ£¬4*32bit´óС DMA_Handle_dcmi.Init.MemBurst = DMA_MBURST_SINGLE; // µ¥´Î´«Êä DMA_Handle_dcmi.Init.PeriphBurst = DMA_PBURST_SINGLE; // µ¥´Î´«Êä HAL_DMA_Init(&DMA_Handle_dcmi); // ÅäÖÃDMA __HAL_LINKDMA(&hdcmi, DMA_Handle, DMA_Handle_dcmi); // ¹ØÁªDCMI&frac34;ä±ú HAL_NVIC_SetPriority(DMA2_Stream7_IRQn, 0, 0); // ÉèÖÃÖжÏÓÅÏȼ¶ HAL_NVIC_EnableIRQ(DMA2_Stream7_IRQn); // ʹÄÜÖÐ¶Ï } /*************************************************************************************************************************************** * º¯ Êý Ãû: OV2640_Delay * Èë¿Ú²ÎÊý: Delay - ÑÓʱʱ¼ä£¬µ¥Î» ms * º¯Êý¹¦ÄÜ: ¼òµ¥ÑÓʱº¯Êý£¬²»ÊǺÜ&frac34;«È· * ˵ Ã÷: ΪÁËÒÆÖ²µÄ¼ò±ãÐÔ,´Ë´¦²ÉÓÃÈí¼þÑÓʱ£¬Êµ¼ÊÏîÄ¿ÖпÉÒÔÌæ»»&sup3;ÉRTOSµÄÑÓʱ»òÕßHAL¿âµÄÑÓʱ *****************************************************************************************************************************************/ void OV2640_Delay(volatile uint32_t Delay) { volatile uint16_t i; while (Delay --) { for (i = 0; i < 20000; i++); } // HAL_Delay(Delay); // ¿ÉʹÓÃHAL¿âµÄÑÓʱ } /*************************************************************************************************************************************** * º¯ Êý Ãû: DCMI_OV2640_Init * * º¯Êý¹¦ÄÜ: &sup3;õʼSCCB¡¢DCMI¡¢DMAÒÔ¼°ÅäÖÃOV2640 * *****************************************************************************************************************************************/ int8_t DCMI_OV2640_Init(void) { uint16_t Device_ID; // ¶¨Òå±äÁ¿´æ´¢Æ÷¼þID SCCB_GPIO_Config(); // SCCBÒý½Å&sup3;õʼ»¯ MX_DCMI_Init(); // &sup3;õʼ»¯DCMIÅäÖÃÒý½Å OV2640_DMA_Init(); // &sup3;õʼ»¯DMAÅäÖà OV2640_Reset(); // Ö´ÐÐÈí¼þ¸´Î» Device_ID = OV2640_ReadID(); // ¶ÁÈ¡Æ÷¼þID if( (Device_ID == 0x2640) || (Device_ID == 0x2642) ) // ½øÐÐÆ¥Å䣬ʵ¼ÊµÄÆ÷¼þID¿ÉÄÜÊÇ 0x2640 »òÕß 0x2642 { printf ("OV2640 OK,ID:0x%X\r\n",Device_ID); // Æ¥Åäͨ¹ý OV2640_Config( OV2640_SVGA_Config ); // ÅäÖà SVGAģʽ ------> 800*600£¬ ×î´óÖ¡ÂÊ30Ö¡ // OV2640_Config( OV2640_UXGA_Config ); // ÅäÖà UXGAģʽ ------> 1600*1200£¬×î´óÖ¡ÂÊ15Ö¡ OV2640_Set_Framesize(OV2640_Width,OV2640_Height); // ÉèÖÃOV2640Êä&sup3;öµÄͼÏñ´óС OV2640_DCMI_Crop(Display_Width, Display_Height, OV2640_Width, OV2640_Height ); // ½«OV2640Êä&sup3;öͼÏñ²Ã¼ô&sup3;ÉÊÊÓ¦ÆÁÄ»µÄ´óС return OV2640_Success; // ·µ»Ø&sup3;ɹ¦±êÖ&frac34; } else { printf ("OV2640 ERROR!!!!! ID:%X\r\n",Device_ID); // ¶ÁÈ¡ID´íÎó return OV2640_Error; // ·µ»Ø´íÎó±êÖ&frac34; } } /*************************************************************************************************************************************** * º¯ Êý Ãû: OV2640_DMA_Transmit_Continuous * * Èë¿Ú²ÎÊý: DMA_Buffer - DMA½«Òª´«ÊäµÄµØÖ·£¬¼´ÓÃÓÚ´æ´¢ÉãÏñÍ·Êý&frac34;ÝµÄ´æ´¢ÇøµØÖ· * DMA_BufferSize - ´«ÊäµÄÊý&frac34;Ý´óС£¬32λ¿í * * º¯Êý¹¦ÄÜ: Æô¶¯DMA´«Ê䣬Á¬ÐøÄ£Ê½ * * ˵ Ã÷: 1. ¿ªÆôÁ¬ÐøÄ£Ê½Ö®ºó£¬»áÒ»Ö±½øÐд«Ê䣬&sup3;ý·Ç¹ÒÆð»òÕßÍ£Ö¹DCMI * 2. OV2640ʹÓÃRGB565ģʽʱ£¬1¸öÏñËØµãÐèÒª2¸ö×Ö½ÚÀ´´æ´¢ * 3. ÒòΪDMAÅäÖô«ÊäÊý&frac34;ÝΪ32λ¿í£¬¼ÆËã DMA_BufferSize ʱ£¬ÐèÒª&sup3;ýÒÔ4£¬ÀýÈ磺 * Òª»ñÈ¡ 240*240·Ö±æÂÊ µÄͼÏñ£¬ÐèÒª´«Êä 240*240*2 = 115200 ×Ö½ÚµÄÊý&frac34;Ý£¬ * Ôò DMA_BufferSize = 115200 / 4 = 28800 ¡£ *LXB *****************************************************************************************************************************************/ void OV2640_DMA_Transmit_Continuous(uint32_t DMA_Buffer,uint32_t DMA_BufferSize) { DMA_Handle_dcmi.Init.Mode = DMA_CIRCULAR; // Ñ­»·Ä£Ê½ HAL_DMA_Init(&DMA_Handle_dcmi); // ÅäÖÃDMA // ʹÄÜDCMI²É¼¯Êý&frac34;Ý,Á¬Ðø²É¼¯Ä£Ê½ HAL_DCMI_Start_DMA(&hdcmi, DCMI_MODE_CONTINUOUS, (uint32_t)DMA_Buffer,DMA_BufferSize); } /*************************************************************************************************************************************** * º¯ Êý Ãû: OV2640_DMA_Transmit_Snapshot * * Èë¿Ú²ÎÊý: DMA_Buffer - DMA½«Òª´«ÊäµÄµØÖ·£¬¼´ÓÃÓÚ´æ´¢ÉãÏñÍ·Êý&frac34;ÝµÄ´æ´¢ÇøµØÖ· * DMA_BufferSize - ´«ÊäµÄÊý&frac34;Ý´óС£¬32λ¿í * * º¯Êý¹¦ÄÜ: Æô¶¯DMA´«Ê䣬¿ìÕÕģʽ£¬´«Êäһ֡ͼÏñºóÍ£Ö¹ * * ˵ Ã÷: 1. ¿ìÕÕģʽ£¬Ö»´«ÊäÒ»Ö¡µÄÊý&frac34;Ý * 2. OV2640ʹÓÃRGB565ģʽʱ£¬1¸öÏñËØµãÐèÒª2¸ö×Ö½ÚÀ´´æ´¢ * 3. ÒòΪDMAÅäÖô«ÊäÊý&frac34;ÝΪ32λ¿í£¬¼ÆËã DMA_BufferSize ʱ£¬ÐèÒª&sup3;ýÒÔ4£¬ÀýÈ磺 * Òª»ñÈ¡ 240*240·Ö±æÂÊ µÄͼÏñ£¬ÐèÒª´«Êä 240*240*2 = 115200 ×Ö½ÚµÄÊý&frac34;Ý£¬ * Ôò DMA_BufferSize = 115200 / 4 = 28800 ¡£ * 4. ʹÓøÃģʽ´«ÊäÍê&sup3;ÉÖ®ºó£¬DCMI»á±»¹ÒÆð£¬ÔÙ´ÎÆôÓô«Êä֮ǰ£¬ÐèÒªµ÷Óà OV2640_DCMI_Resume() »Ö¸´DCMI * *****************************************************************************************************************************************/ void OV2640_DMA_Transmit_Snapshot(uint32_t DMA_Buffer,uint32_t DMA_BufferSize) { DMA_Handle_dcmi.Init.Mode = DMA_NORMAL; // Õý&sup3;£Ä£Ê½ HAL_DMA_Init(&DMA_Handle_dcmi); // ÅäÖÃDMA HAL_DCMI_Start_DMA(&hdcmi, DCMI_MODE_SNAPSHOT, (uint32_t)DMA_Buffer,DMA_BufferSize); } /*************************************************************************************************************************************** * º¯ Êý Ãû: OV2640_DCMI_Suspend * * º¯Êý¹¦ÄÜ: ¹ÒÆðDCMI£¬Í£Ö¹²¶»ñÊý&frac34;Ý * * ˵ Ã÷: 1. ¿ªÆôÁ¬ÐøÄ£Ê½Ö®ºó£¬ÔÙµ÷Óøú¯Êý£¬»áÍ£Ö¹²¶»ñDCMIµÄÊý&frac34;Ý * 2. ¿ÉÒÔµ÷Óà OV2640_DCMI_Resume() »Ö¸´DCMI * 3. ÐèҪעÒâµÄ£¬¹ÒÆðDCMIÆÚ¼ä£¬DMAÊÇûÓÐÍ£Ö¹¹¤×÷µÄ *LXB *****************************************************************************************************************************************/ void OV2640_DCMI_Suspend(void) { HAL_DCMI_Suspend(&hdcmi); // ¹ÒÆðDCMI } /*************************************************************************************************************************************** * º¯ Êý Ãû: OV2640_DCMI_Resume * * º¯Êý¹¦ÄÜ: »Ö¸´DCMI£¬¿ªÊ¼²¶»ñÊý&frac34;Ý * * ˵ Ã÷: 1. µ±DCMI±»¹ÒÆðʱ£¬¿ÉÒÔµ÷Óøú¯Êý»Ö¸´ * 2. ʹÓà OV2640_DMA_Transmit_Snapshot() ¿ìÕÕģʽ£¬´«ÊäÍê&sup3;ÉÖ®ºó£¬DCMIÒ²»á±»¹ÒÆð£¬ÔÙ´ÎÆôÓô«Êä֮ǰ£¬ * ÐèÒªµ÷Óñ&frac34;º¯Êý»Ö¸´DCMI²¶»ñ * *****************************************************************************************************************************************/ void OV2640_DCMI_Resume(void) { (&hdcmi)->State = HAL_DCMI_STATE_BUSY; // ±ä¸üDCMI±êÖ&frac34; (&hdcmi)->Instance->CR |= DCMI_CR_CAPTURE; // ¿ªÆôDCMI²¶»ñ } /*************************************************************************************************************************************** * º¯ Êý Ãû: OV2640_DCMI_Stop * * º¯Êý¹¦ÄÜ: ½ûÖ¹DCMIµÄDMAÇëÇó£¬Í£Ö¹DCMI²¶»ñ£¬½ûÖ¹DCMIÍâÉè * *****************************************************************************************************************************************/ void OV2640_DCMI_Stop(void) { HAL_DCMI_Stop(&hdcmi); } /*************************************************************************************************************************************** * º¯ Êý Ãû: OV2640_DCMI_Crop * * Èë¿Ú²ÎÊý: Displey_XSize ¡¢Displey_YSize - ÏÔÊ&frac34;Æ÷µÄ&sup3;¤¿í * Sensor_XSize¡¢Sensor_YSize - ÉãÏñÍ·´«¸ÐÆ÷Êä&sup3;öͼÏñµÄ&sup3;¤¿í * * º¯Êý¹¦ÄÜ: ʹÓÃDCMIµÄ²Ã¼ô¹¦ÄÜ£¬½«´«¸ÐÆ÷Êä&sup3;öµÄͼÏñ²Ã¼ô&sup3;ÉÊÊÓ¦ÆÁÄ»µÄ´óС * * ˵ Ã÷: 1. ÒòΪÉãÏñÍ·Êä&sup3;öµÄ»­Ãæ±ÈÀý¹Ì¶¨Îª4:3£¬²»Ò»¶¨Æ¥ÅäÏÔÊ&frac34;Æ÷ * 2. ÐèҪעÒâµÄÊÇ£¬ÉãÏñÍ·Êä&sup3;öµÄͼÏñ&sup3;¤¡¢¿í±ØÐëÒªÄܱ»4Õû&sup3;ý£¡£¨ ʹÓÃOV2640_Set_Framesizeº¯Êý½øÐÐÉèÖà £© * 3. DCMIµÄˮƽÓÐЧÏñËØÒ²±ØÐëÒªÄܱ»4Õû&sup3;ý£¡ * 4. º¯Êý»á¼ÆËãˮƽºÍ´¹Ö±Æ«ÒÆ£¬&frac34;¡Á¿Èû­Ãæ&frac34;ÓÖвüô *****************************************************************************************************************************************/ int8_t OV2640_DCMI_Crop(uint16_t Displey_XSize,uint16_t Displey_YSize,uint16_t Sensor_XSize,uint16_t Sensor_YSize ) { uint16_t DCMI_X_Offset,DCMI_Y_Offset; // ˮƽºÍ´¹Ö±Æ«ÒÆ£¬´¹Ö±´ú±íµÄÊÇÐÐÊý£¬Ë®Æ½´ú±íµÄÊÇÏñËØÊ±ÖÓÊý£¨PCLKÖÜÆÚÊý£© uint16_t DCMI_CAPCNT; // ˮƽÓÐЧÏñËØ£¬´ú±íµÄÊÇÏñËØÊ±ÖÓÊý£¨PCLKÖÜÆÚÊý£© uint16_t DCMI_VLINE; // ´¹Ö±ÓÐЧÐÐÊý if( (Displey_XSize>=Sensor_XSize)|| (Displey_YSize>=Sensor_YSize) ) { // printf("ʵ¼ÊÏÔÊ&frac34;µÄ&sup3;ß´ç´óÓÚ»òµÈÓÚÉãÏñÍ·Êä&sup3;öµÄ&sup3;ߴ磬ÍË&sup3;öDCMI²Ã¼ô\r\n"); return OV2640_Error; //Èç¹ûʵ¼ÊÏÔÊ&frac34;µÄ&sup3;ß´ç´óÓÚ»òµÈÓÚÉãÏñÍ·Êä&sup3;öµÄ&sup3;ߴ磬ÔòÍË&sup3;öµ±Ç°º¯Êý£¬²»½øÐвüô } // ÔÚÉèÖÃΪRGB565¸ñʽʱ£¬Ë®Æ½Æ«ÒÆ£¬±ØÐëÊÇÆæÊý£¬·ñÔò»­ÃæÉ«²Ê²»ÕýÈ·£¬ // ÒòΪһ¸öÓÐЧÏñËØÊÇ2¸ö×Ö½Ú£¬ÐèÒª2¸öPCLKÖÜÆÚ£¬ËùÒÔ±ØÐë´ÓÆæÊýλ¿ªÊ¼£¬²»È»Êý&frac34;Ý»á´íÂÒ£¬ // ÐèҪעÒâµÄÊÇ£¬¼Ä´æÆ÷ÖµÊÇ´Ó0¿ªÊ¼ËãÆðµÄ £¡ DCMI_X_Offset = Sensor_XSize - Displey_XSize; // ʵ¼Ê¼ÆËã¹ý&sup3;ÌΪ£¨Sensor_XSize - LCD_XSize£©/2*2 // ¼ÆËã´¹Ö±Æ«ÒÆ£¬&frac34;¡Á¿Èû­Ãæ&frac34;ÓÖвüô£¬¸ÃÖµ´ú±íµÄÊÇÐÐÊý£¬ DCMI_Y_Offset = (Sensor_YSize - Displey_YSize)/2-1; // ¼Ä´æÆ÷ÖµÊÇ´Ó0¿ªÊ¼ËãÆðµÄ£¬ËùÒÔÒª-1 // ÒòΪһ¸öÓÐЧÏñËØÊÇ2¸ö×Ö½Ú£¬ÐèÒª2¸öPCLKÖÜÆÚ£¬ËùÒÔÒª&sup3;Ë2 // ×îÖյõ½µÄ¼Ä´æÆ÷Öµ£¬±ØÐëÒªÄܱ»4Õû&sup3;ý£¡ DCMI_CAPCNT = Displey_XSize*2-1; // ¼Ä´æÆ÷ÖµÊÇ´Ó0¿ªÊ¼ËãÆðµÄ£¬ËùÒÔÒª-1 DCMI_VLINE = Displey_YSize-1; // ´¹Ö±ÓÐЧÐÐÊý // printf("%d %d %d %d\r\n",DCMI_X_Offset,DCMI_Y_Offset,DCMI_CAPCNT,DCMI_VLINE); HAL_DCMI_ConfigCrop (&hdcmi,DCMI_X_Offset,DCMI_Y_Offset,DCMI_CAPCNT,DCMI_VLINE);// ÉèÖòüô´°¿Ú HAL_DCMI_EnableCrop(&hdcmi); // ʹÄܲüô return OV2640_Success; } /*************************************************************************************************************************************** * º¯ Êý Ãû: OV2640_Reset * * º¯Êý¹¦ÄÜ: Ö´ÐÐÈí¼þ¸´Î» * * ˵ Ã÷: ÔÚÅäÖÃOV2640֮ǰ£¬ÐèÒªÖ´ÐÐÒ»´ÎÈí¼þ¸´Î» * *****************************************************************************************************************************************/ void OV2640_Reset(void) { OV2640_Delay(5); // µÈ´ýÄ£¿éÉϵçÎȶ¨£¬×îÉÙ5ms£¬È»ºóÀ­µÍPWDN OV2640_PWDN_OFF; // PWDN Òý½ÅÊä&sup3;öµÍµçƽ£¬²»¿ªÆôµôµçģʽ£¬ÉãÏñÍ·Õý&sup3;£¹¤×÷£¬´ËʱÉãÏñÍ·Ä£¿éµÄ°×É«LED»áµãÁÁ // ¸ù&frac34;ÝOV2640µÄÉϵçʱÐò£¬Ó²¼þ¸´Î»µÄ&sup3;ÖÐøÊ±¼äÒª>=3ms£¬Â¹Ð¡°àµÄOV2640²ÉÓÃÓ²¼þRC¸´Î»£¬&sup3;ÖÐøÊ±¼ä´ó¸ÅÔÚ6ms×óÓÒ // Òò´Ë¼ÓÈëÑÓʱ£¬µÈ´ýÓ²¼þ¸´Î»Íê&sup3;ɲ¢Îȶ¨ÏÂÀ´ OV2640_Delay(5); SCCB_WriteReg( OV2640_SEL_Registers, OV2640_SEL_SENSOR); // Ñ¡Ôñ SENSOR ¼Ä´æÆ÷×é SCCB_WriteReg( OV2640_SENSOR_COM7, 0x80); // Æô¶¯Èí¼þ¸´Î» // ¸ù&frac34;ÝOV2640µÄÈí¼þ¸´Î»Ê±Ðò£¬Èí¼þ¸´Î»Ö´Ðкó£¬Òª>=2ms·½¿ÉÖ´ÐÐSCCBÅäÖ㬴˴¦²ÉÓñ£ÊØÒ»µãµÄ²ÎÊý£¬ÑÓʱ10ms OV2640_Delay(10); } /*************************************************************************************************************************************** * º¯ Êý Ãû: OV2640_ReadID * * º¯Êý¹¦ÄÜ: ¶ÁÈ¡ OV2640 µÄÆ÷¼þID * * ˵ Ã÷: ʵ¼ÊµÄÆ÷¼þID¿ÉÄÜÊÇ 0x2640 »òÕß 0x2642£¬Åú´Î²»Í¬ID¿ÉÄܻ᲻һÑù * *****************************************************************************************************************************************/ uint16_t OV2640_ReadID(void) { uint8_t PID_H,PID_L; // ID±äÁ¿ SCCB_WriteReg( OV2640_SEL_Registers, OV2640_SEL_SENSOR); // Ñ¡Ôñ SENSOR ¼Ä´æÆ÷×é PID_H = SCCB_ReadReg(OV2640_SENSOR_PIDH); // ¶ÁÈ¡ID¸ß×Ö½Ú PID_L = SCCB_ReadReg(OV2640_SENSOR_PIDL); // ¶ÁÈ¡IDµÍ×Ö½Ú return(PID_H<<8)|PID_L; // ·µ»ØÍêÕûµÄÆ÷¼þID } /*************************************************************************************************************************************** * º¯ Êý Ãû: OV2640_Config * * Èë¿Ú²ÎÊý: (*ConfigData)[2] - ÒªÅäÖõIJÎÊý£¬¿ÉÅäÖÃΪ OV2640_SVGA_Config »ò OV2640_UXGA_Config * * º¯Êý¹¦ÄÜ: ÅäÖà OV2640 ´«¸ÐÆ÷ºÍDSP²ÎÊý * * ˵ Ã÷: 1. ¿ÉÅäÖÃΪ SVGA »òÕß UXGAģʽ * 2. SVGA ·Ö±æÂÊΪ800*600£¬×î¸ßÖ§&sup330Ö¡ * 3. UXGA ·Ö±æÂÊΪ1600*1200£¬×î¸ßÖ§&sup3;Ö15Ö¡ * 4. ²ÎÊý¶¨ÒåÔÚ dcmi_ov2640_cfg.h * *****************************************************************************************************************************************/ void OV2640_Config( const uint8_t (*ConfigData)[2] ) { uint32_t i; // ¼ÆÊý±äÁ¿ for( i=0; ConfigData[i][0]; i++) { SCCB_WriteReg( ConfigData[i][0], ConfigData[i][1]); // ½øÐвÎÊýÅäÖà } } /*************************************************************************************************************************************** * º¯ Êý Ãû: OV2640_Set_Framesize * * Èë¿Ú²ÎÊý: pixformat - ÏñËØ¸ñʽ£¬¿ÉÑ¡Ôñ Pixformat_RGB565¡¢Pixformat_JPEG * * º¯Êý¹¦ÄÜ: ÉèÖÃÊä&sup3;öµÄÏñËØ¸ñʽ * *****************************************************************************************************************************************/ void OV2640_Set_Pixformat(uint8_t pixformat) { const uint8_t (*ConfigData)[2]; uint32_t i; // ¼ÆÊý±äÁ¿ switch (pixformat) { case Pixformat_RGB565: ConfigData = OV2640_RGB565_Config; break; case Pixformat_JPEG: ConfigData = OV2640_JPEG_Config; break; default: break; } for( i=0; ConfigData[i][0]; i++) { SCCB_WriteReg( ConfigData[i][0], ConfigData[i][1]); // ½øÐвÎÊýÅäÖà } } /*************************************************************************************************************************************** * º¯ Êý Ãû: OV2640_Set_Framesize * * Èë¿Ú²ÎÊý: width - ʵ¼ÊÊä&sup3;öͼÏñµÄ&sup3;¤¶È£¬height - ʵ¼ÊÊä&sup3;öͼÏñµÄ¿í¶È * * º¯Êý¹¦ÄÜ: ÉèÖÃʵ¼ÊÊä&sup3;öµÄͼÏñ´óС * * ˵ Ã÷: 1. OV2640ÉèÖÃΪ SVGA£¨800*600£© »òÕß UXGA£¨1600*1200£©Ä£Ê½£¬Í¼Ïñ´óСͨ&sup3;£Óëʵ¼ÊÓÃµÄÆÁÄ»·Ö±æÂʲ»Ò»Ñù£¬ * Òò´Ë¿ÉÒÔµ÷Óôκ¯Êý£¬ÉèÖÃʵ¼ÊÊä&sup3;öµÄͼÏñ´óС * 2. ÐèҪעÒâµÄÊÇ£¬ÒªÉèÖõÄͼÏñ&sup3;¤¡¢¿í±ØÐëÄܱ»4Õû&sup3;ý£¡ * 3. ²¢²»ÊÇÉèÖÃÊä&sup3;öµÄͼÏñ·Ö±æÂÊԽС֡ÂÊ&frac34;ÍÔ½¸ß£¬Ö¡ÂÊÖ»ºÍÅäÖõÄģʽÓйأ¬ÀýÈçÅäÖÃΪSVGA×î¸ßÖ»ÄÜÖ§&sup330Ö¡ * *****************************************************************************************************************************************/ int8_t OV2640_Set_Framesize(uint16_t width,uint16_t height) { if( (width%4)||(height%4) ) // Êä&sup3;öͼÏñµÄ´óСһ¶¨ÒªÄܱ»4Õû&sup3;ý { return OV2640_Error; // ·µ»Ø´íÎó±êÖ&frac34; } SCCB_WriteReg(OV2640_SEL_Registers,OV2640_SEL_DSP); // Ñ¡Ôñ DSP¼Ä´æÆ÷×é SCCB_WriteReg(0X5A, width/4 &0XFF); // ʵ¼ÊͼÏñÊä&sup3;öµÄ¿í¶È£¨OUTW£©£¬7~0 bit£¬¼Ä´æÆ÷µÄÖµµÈÓÚʵ¼ÊÖµ/4 SCCB_WriteReg(0X5B, height/4 &0XFF); // ʵ¼ÊͼÏñÊä&sup3;öµÄ¸ß¶È£¨OUTH£©£¬7~0 bit£¬¼Ä´æÆ÷µÄÖµµÈÓÚʵ¼ÊÖµ/4 SCCB_WriteReg(0X5C, (width/4>>8&0X03)|(height/4>>6&0x04) ); // ÉèÖÃZMHHµÄBit[2:0]£¬Ò²&frac34;ÍÊÇOUTH µÄµÚ 8 bit£¬OUTW µÄµÚ 9~8 bit£¬ SCCB_WriteReg(OV2640_DSP_RESET,0X00); // ¸´Î» return OV2640_Success; // &sup3;ɹ¦ } /*************************************************************************************************************************************** * º¯ Êý Ãû: OV2640_Set_Horizontal_Mirror * * Èë¿Ú²ÎÊý: ConfigState - ÖÃ1ʱ£¬Í¼Ïñ»áˮƽ&frac34;µÏñ£¬ÖÃ0ʱ»Ö¸´Õý&sup3;£ * * º¯Êý¹¦ÄÜ: ÓÃÓÚÉèÖÃÊä&sup3;öµÄͼÏñÊÇ·ñ½øÐÐˮƽ&frac34;µÏñ * *****************************************************************************************************************************************/ int8_t OV2640_Set_Horizontal_Mirror( int8_t ConfigState ) { uint8_t OV2640_Reg; // ¼Ä´æÆ÷µÄÖµ SCCB_WriteReg(OV2640_SEL_Registers,OV2640_SEL_SENSOR); // Ñ¡Ôñ SENSOR ¼Ä´æÆ÷×é OV2640_Reg = SCCB_ReadReg(OV2640_SENSOR_REG04); // ¶ÁÈ¡ 0x04 µÄ¼Ä´æÆ÷Öµ // REG04,¼Ä´æÆ÷×é4£¬¼Ä´æÆ÷µØÖ·Îª 0x04£¬¸Ã¼Ä´æÆ÷µÄBit[7]£¬ÓÃÓÚÉèÖÃˮƽÊÇ·ñ&frac34;µÏñ if ( ConfigState == OV2640_Enable ) // Èç¹ûʹÄÜ&frac34;µÏñ { OV2640_Reg |= 0X80; // Bit[7]ÖÃ1Ôò&frac34;µÏñ } else // È¡Ïû&frac34;µÏñ { OV2640_Reg &= ~0X80; // Bit[7]ÖÃ0ÔòÊÇÕý&sup3;£Ä£Ê½ } return SCCB_WriteReg(OV2640_SENSOR_REG04,OV2640_Reg); // дÈë¼Ä´æÆ÷ } /*************************************************************************************************************************************** * º¯ Êý Ãû: OV2640_Set_Vertical_Flip * * Èë¿Ú²ÎÊý: ConfigState - ÖÃ1ʱ£¬Í¼Ïñ»á´¹Ö±·­×ª£¬ÖÃ0ʱ»Ö¸´Õý&sup3;£ * * º¯Êý¹¦ÄÜ: ÓÃÓÚÉèÖÃÊä&sup3;öµÄͼÏñÊÇ·ñ½øÐд¹Ö±·­×ª * *****************************************************************************************************************************************/ int8_t OV2640_Set_Vertical_Flip( int8_t ConfigState ) { uint8_t OV2640_Reg; // ¼Ä´æÆ÷µÄÖµ SCCB_WriteReg(OV2640_SEL_Registers,OV2640_SEL_SENSOR); // Ñ¡Ôñ SENSOR ¼Ä´æÆ÷×é OV2640_Reg = SCCB_ReadReg(OV2640_SENSOR_REG04); // ¶ÁÈ¡ 0x04 µÄ¼Ä´æÆ÷Öµ // REG04,¼Ä´æÆ÷×é4£¬¼Ä´æÆ÷µØÖ·Îª 0x04£¬¸Ã¼Ä´æÆ÷µÄµÚBit[6]£¬ÓÃÓÚÉèÖÃˮƽÊÇ´¹Ö±·­×ª if ( ConfigState == OV2640_Enable ) { // ´Ë´¦ÉèÖòο¼OpenMVµÄÇý¶¯ // Bit[4]&frac34;ßÌåµÄ×÷ÓÃÊÇʲôÊÖ²áûÓÐ˵£¬Èç¹û´¹Ö±·­×ªÖ®ºó£¬¸Ãλ²»ÖÃ1µÄ»°£¬ÑÕÉ«»á²»¶Ô OV2640_Reg |= 0X40|0x10 ; // Bit[6]ÖÃ1ʱ£¬Í¼Ïñ»á´¹Ö±·­×ª } else // È¡Ïû·­×ª { OV2640_Reg &= ~(0X40|0x10 ); // ½«Bit[6]ºÍBit[4]¶¼Ð´0 } return SCCB_WriteReg(OV2640_SENSOR_REG04,OV2640_Reg); // дÈë¼Ä´æÆ÷ } /*************************************************************************************************************************************** * º¯ Êý Ãû: OV2640_Set_Saturation * * Èë¿Ú²ÎÊý: Saturation - ±¥ºÍ¶È£¬¿ÉÉèÖÃΪ5¸öµÈ¼¶£º2£¬1£¬0£¬-1£¬-2 * * ˵ Ã÷: 1. ÊÖ²áÀïûÓÐ˵Ã÷ÅäÖÃÖеÄÄÇ2¸ö¼Ä´æÆ÷ÈçºÎʹÓã¬Òò´ËÕâÀïÖ±½ÓʹÓÃOV2640±à&sup3;ÌÊÖ²á¸ø&sup3;öµÄ´úÂë * 2.±¥ºÍ¶ÈÔ½¸ß£¬É«²Ê&frac34;ÍÔ½ÏÊÑÞ£¬µ«µ±ÏàÓ¦µÄÇåÎú¶È»áϽµ£¬Ôëµã±ä¶à * *****************************************************************************************************************************************/ void OV2640_Set_Saturation(int8_t Saturation) { SCCB_WriteReg(OV2640_SEL_Registers,OV2640_SEL_DSP); // Ñ¡Ôñ DSP¼Ä´æÆ÷×é switch (Saturation) { case 2: SCCB_WriteReg(OV2640_DSP_BPADDR,0x00); SCCB_WriteReg(OV2640_DSP_BPDATA,0x02); SCCB_WriteReg(OV2640_DSP_BPADDR,0x03); SCCB_WriteReg(OV2640_DSP_BPDATA,0x68); SCCB_WriteReg(OV2640_DSP_BPDATA,0x68); break; case 1: SCCB_WriteReg(OV2640_DSP_BPADDR,0x00); SCCB_WriteReg(OV2640_DSP_BPDATA,0x02); SCCB_WriteReg(OV2640_DSP_BPADDR,0x03); SCCB_WriteReg(OV2640_DSP_BPDATA,0x58); SCCB_WriteReg(OV2640_DSP_BPDATA,0x58); break; case 0: SCCB_WriteReg(OV2640_DSP_BPADDR,0x00); SCCB_WriteReg(OV2640_DSP_BPDATA,0x02); SCCB_WriteReg(OV2640_DSP_BPADDR,0x03); SCCB_WriteReg(OV2640_DSP_BPDATA,0x48); SCCB_WriteReg(OV2640_DSP_BPDATA,0x48); break; case -1: SCCB_WriteReg(OV2640_DSP_BPADDR,0x00); SCCB_WriteReg(OV2640_DSP_BPDATA,0x02); SCCB_WriteReg(OV2640_DSP_BPADDR,0x03); SCCB_WriteReg(OV2640_DSP_BPDATA,0x38); SCCB_WriteReg(OV2640_DSP_BPDATA,0x38); break; case -2: SCCB_WriteReg(OV2640_DSP_BPADDR,0x00); SCCB_WriteReg(OV2640_DSP_BPDATA,0x02); SCCB_WriteReg(OV2640_DSP_BPADDR,0x03); SCCB_WriteReg(OV2640_DSP_BPDATA,0x28); SCCB_WriteReg(OV2640_DSP_BPDATA,0x28); break; default: break; } } /*************************************************************************************************************************************** * º¯ Êý Ãû: OV2640_Set_Brightness * * Èë¿Ú²ÎÊý: Brightness - ÁÁ¶È£¬¿ÉÉèÖÃΪ5¸öµÈ¼¶£º2£¬1£¬0£¬-1£¬-2 * * ˵ Ã÷: 1. ÊÖ²áÀïûÓÐ˵Ã÷ÅäÖÃÖеÄÄÇ2¸ö¼Ä´æÆ÷ÈçºÎʹÓã¬Òò´ËÕâÀïÖ±½ÓʹÓÃOV2640±à&sup3;ÌÊÖ²á¸ø&sup3;öµÄ´úÂë * 2. ÁÁ¶ÈÔ½¸ß£¬»­Ãæ&frac34;ÍÔ½Ã÷ÁÁ£¬µ«ÊÇ»á±äÄ£ºýһЩ * *****************************************************************************************************************************************/ void OV2640_Set_Brightness(int8_t Brightness) { SCCB_WriteReg(OV2640_SEL_Registers,OV2640_SEL_DSP); // Ñ¡Ôñ DSP¼Ä´æÆ÷×é switch (Brightness) { case 2: SCCB_WriteReg(OV2640_DSP_BPADDR,0x00); SCCB_WriteReg(OV2640_DSP_BPDATA,0x04); SCCB_WriteReg(OV2640_DSP_BPADDR,0x09); SCCB_WriteReg(OV2640_DSP_BPDATA,0x40); SCCB_WriteReg(OV2640_DSP_BPDATA,0x00); break; case 1: SCCB_WriteReg(OV2640_DSP_BPADDR,0x00); SCCB_WriteReg(OV2640_DSP_BPDATA,0x04); SCCB_WriteReg(OV2640_DSP_BPADDR,0x09); SCCB_WriteReg(OV2640_DSP_BPDATA,0x30); SCCB_WriteReg(OV2640_DSP_BPDATA,0x00); break; case 0: SCCB_WriteReg(OV2640_DSP_BPADDR,0x00); SCCB_WriteReg(OV2640_DSP_BPDATA,0x04); SCCB_WriteReg(OV2640_DSP_BPADDR,0x09); SCCB_WriteReg(OV2640_DSP_BPDATA,0x20); SCCB_WriteReg(OV2640_DSP_BPDATA,0x00); break; case -1: SCCB_WriteReg(OV2640_DSP_BPADDR,0x00); SCCB_WriteReg(OV2640_DSP_BPDATA,0x04); SCCB_WriteReg(OV2640_DSP_BPADDR,0x09); SCCB_WriteReg(OV2640_DSP_BPDATA,0x10); SCCB_WriteReg(OV2640_DSP_BPDATA,0x00); break; case -2: SCCB_WriteReg(OV2640_DSP_BPADDR,0x00); SCCB_WriteReg(OV2640_DSP_BPDATA,0x04); SCCB_WriteReg(OV2640_DSP_BPADDR,0x09); SCCB_WriteReg(OV2640_DSP_BPDATA,0x00); SCCB_WriteReg(OV2640_DSP_BPDATA,0x00); break; default: break; } } /*************************************************************************************************************************************** * º¯ Êý Ãû: OV2640_Set_Contrast * * Èë¿Ú²ÎÊý: Contrast - ¶Ô±È¶È£¬¿ÉÉèÖÃΪ5¸öµÈ¼¶£º2£¬1£¬0£¬-1£¬-2 * * ˵ Ã÷: 1. ÊÖ²áÀïûÓÐ˵Ã÷ÅäÖÃÖеÄÄÇ2¸ö¼Ä´æÆ÷ÈçºÎʹÓã¬Òò´ËÕâÀïÖ±½ÓʹÓÃOV2640±à&sup3;ÌÊÖ²á¸ø&sup3;öµÄ´úÂë * 2. ¶Ô±È¶ÈÔ½¸ß£¬»­ÃæÔ½ÇåÎú£¬ºÚ°×Ô½¼Ó·ÖÃ÷ * *****************************************************************************************************************************************/ void OV2640_Set_Contrast(int8_t Contrast) { SCCB_WriteReg(OV2640_SEL_Registers,OV2640_SEL_DSP); // Ñ¡Ôñ DSP¼Ä´æÆ÷×é switch (Contrast) { case 2: SCCB_WriteReg(OV2640_DSP_BPADDR,0x00); SCCB_WriteReg(OV2640_DSP_BPDATA,0x04); SCCB_WriteReg(OV2640_DSP_BPADDR,0x07); SCCB_WriteReg(OV2640_DSP_BPDATA,0x20); SCCB_WriteReg(OV2640_DSP_BPADDR,0x28); SCCB_WriteReg(OV2640_DSP_BPDATA,0x0c); SCCB_WriteReg(OV2640_DSP_BPDATA,0x06); break; case 1: SCCB_WriteReg(OV2640_DSP_BPADDR,0x00); SCCB_WriteReg(OV2640_DSP_BPDATA,0x04); SCCB_WriteReg(OV2640_DSP_BPADDR,0x07); SCCB_WriteReg(OV2640_DSP_BPDATA,0x20); SCCB_WriteReg(OV2640_DSP_BPADDR,0x24); SCCB_WriteReg(OV2640_DSP_BPDATA,0x16); SCCB_WriteReg(OV2640_DSP_BPDATA,0x06); break; case 0: SCCB_WriteReg(OV2640_DSP_BPADDR,0x00); SCCB_WriteReg(OV2640_DSP_BPDATA,0x04); SCCB_WriteReg(OV2640_DSP_BPADDR,0x07); SCCB_WriteReg(OV2640_DSP_BPDATA,0x20); SCCB_WriteReg(OV2640_DSP_BPADDR,0x20); SCCB_WriteReg(OV2640_DSP_BPDATA,0x20); SCCB_WriteReg(OV2640_DSP_BPDATA,0x06); break; case -1: SCCB_WriteReg(OV2640_DSP_BPADDR,0x00); SCCB_WriteReg(OV2640_DSP_BPDATA,0x04); SCCB_WriteReg(OV2640_DSP_BPADDR,0x07); SCCB_WriteReg(OV2640_DSP_BPDATA,0x20); SCCB_WriteReg(OV2640_DSP_BPADDR,0x1c); SCCB_WriteReg(OV2640_DSP_BPDATA,0x2a); SCCB_WriteReg(OV2640_DSP_BPDATA,0x06); break; case -2: SCCB_WriteReg(OV2640_DSP_BPADDR,0x00); SCCB_WriteReg(OV2640_DSP_BPDATA,0x04); SCCB_WriteReg(OV2640_DSP_BPADDR,0x07); SCCB_WriteReg(OV2640_DSP_BPDATA,0x20); SCCB_WriteReg(OV2640_DSP_BPADDR,0x18); SCCB_WriteReg(OV2640_DSP_BPDATA,0x34); SCCB_WriteReg(OV2640_DSP_BPDATA,0x06); break; default: break; } } /*************************************************************************************************************************************** * º¯ Êý Ãû: OV2640_Set_Effect * * Èë¿Ú²ÎÊý: effect_Mode - ÌØÐ§Ä£Ê½£¬¿ÉÑ¡Ôñ²ÎÊý OV2640_Effect_Normal¡¢OV2640_Effect_Negative¡¢ * OV2640_Effect_BW¡¢OV2640_Effect_BW_Negative * * º¯Êý¹¦ÄÜ: ÓÃÓÚÉèÖÃOV2640µÄÌØÐ§£¬Õý&sup3;£¡¢¸ºÆ¬¡¢ºÚ°×¡¢ºÚ°×+¸ºÆ¬µÈģʽ * * ˵ Ã÷: ÊÖ²áÀïûÓÐ˵Ã÷ÅäÖÃÖеÄÄÇ2¸ö¼Ä´æÆ÷ÈçºÎʹÓã¬Òò´ËÕâÀïÖ±½ÓʹÓÃOV2640±à&sup3;ÌÊÖ²á¸ø&sup3;öµÄ´úÂë * *****************************************************************************************************************************************/ void OV2640_Set_Effect(uint8_t effect_Mode) { SCCB_WriteReg(OV2640_SEL_Registers,OV2640_SEL_DSP); // Ñ¡Ôñ DSP¼Ä´æÆ÷×é switch (effect_Mode) { case OV2640_Effect_Normal: // Õý&sup3;£Ä£Ê½ SCCB_WriteReg(OV2640_DSP_BPADDR,0x00); SCCB_WriteReg(OV2640_DSP_BPDATA,0x00); SCCB_WriteReg(OV2640_DSP_BPADDR,0x05); SCCB_WriteReg(OV2640_DSP_BPDATA,0x80); SCCB_WriteReg(OV2640_DSP_BPDATA,0x80); break; case OV2640_Effect_Negative: // ¸ºÆ¬Ä£Ê½£¬Ò²&frac34;ÍÊÇÑÕɫȫ²¿È¡·´ SCCB_WriteReg(OV2640_DSP_BPADDR,0x00); SCCB_WriteReg(OV2640_DSP_BPDATA,0x40); SCCB_WriteReg(OV2640_DSP_BPADDR,0x05); SCCB_WriteReg(OV2640_DSP_BPDATA,0x80); SCCB_WriteReg(OV2640_DSP_BPDATA,0x80); break; case OV2640_Effect_BW: // ºÚ°×ģʽ SCCB_WriteReg(OV2640_DSP_BPADDR,0x00); SCCB_WriteReg(OV2640_DSP_BPDATA,0x18); SCCB_WriteReg(OV2640_DSP_BPADDR,0x05); SCCB_WriteReg(OV2640_DSP_BPDATA,0x80); SCCB_WriteReg(OV2640_DSP_BPDATA,0x80); break; case OV2640_Effect_BW_Negative: // ºÚ°×+¸ºÆ¬Ä£Ê½ SCCB_WriteReg(OV2640_DSP_BPADDR,0x00); SCCB_WriteReg(OV2640_DSP_BPDATA,0x58); SCCB_WriteReg(OV2640_DSP_BPADDR,0x05); SCCB_WriteReg(OV2640_DSP_BPDATA,0x80); SCCB_WriteReg(OV2640_DSP_BPDATA,0x80); break; default: break; } } /*************************************************************************************************************************************** * º¯ Êý Ãû: HAL_DCMI_FrameEventCallback * * º¯Êý¹¦ÄÜ: Ö¡»Øµ÷º¯Êý£¬Ã¿´«ÊäÒ»Ö¡Êý&frac34;Ý£¬»á½øÈë¸ÃÖжϷþÎñº¯Êý * * ˵ Ã÷: ÿ´Î´«ÊäÍêÒ»Ö¡£¬¶ÔÏàÓ¦µÄ±êÖ&frac34;λ½øÐвÙ×÷£¬²¢¼ÆËãÖ¡ÂÊ *****************************************************************************************************************************************/ void HAL_DCMI_FrameEventCallback(DCMI_HandleTypeDef *hdcmi) { static uint32_t DCMI_Tick = 0; // ÓÃÓÚ±£´æµ±Ç°µÄʱ¼ä¼ÆÊýÖµ static uint8_t DCMI_Frame_Count = 0; // Ö¡Êý¼ÆÊý if(HAL_GetTick() - DCMI_Tick >= 1000) // ÿ¸ô 1s ¼ÆËãÒ»´ÎÖ¡ÂÊ { DCMI_Tick = HAL_GetTick(); // ÖØÐ»ñÈ¡µ±Ç°Ê±¼ä¼ÆÊýÖµ OV2640_FPS = DCMI_Frame_Count; // »ñµÃfps DCMI_Frame_Count = 0; // ¼ÆÊýÇå0 } DCMI_Frame_Count ++; // û½øÈëÒ»´ÎÖжϣ¨Ã¿´Î´«ÊäÍêÒ»Ö¡Êý&frac34;Ý£©£¬¼ÆÊýÖµ+1 DCMI_FrameState = 1; // ´«ÊäÍê&sup3;ɱêÖ&frac34;λÖÃ1 } /*************************************************************************************************************************************** * º¯ Êý Ãû: HAL_DCMI_ErrorCallback * * º¯Êý¹¦ÄÜ: ´íÎ󻨵÷º¯Êý * * ˵ Ã÷: µ±·¢ÉúDMA´«Êä´íÎó»òÕßFIFOÒç&sup3;ö´íÎó&frac34;Í»á½øÈë *****************************************************************************************************************************************/ void HAL_DCMI_ErrorCallback(DCMI_HandleTypeDef *hdcmi) { // if( HAL_DCMI_GetError(hdcmi) == HAL_DCMI_ERROR_OVR) // { // printf("FIFOÒç&sup3;ö´íÎ󣡣¡£¡\r\n"); // } printf("error:0x%x£¡£¡£¡\r\n",HAL_DCMI_GetError(hdcmi)); } /*********************************************************************************************************************************************************************************************************************************************LXB*************/ // ¹С°à 代码分析
05-12
////////////////////////////////////////////////////////////////////////////////// //±&frac34;&sup3;ÌÐòÖ»¹©Ñ§Ï°Ê¹Óã¬Î´&frac34;­×÷ÕßÐí¿É£¬²»µÃÓÃÓÚÆäËüÈκÎÓÃÍ&frac34; //ÐÀÞ±µç×Ó // // ÎÄ ¼þ Ãû :yanwu.c // °æ ±&frac34; ºÅ : v1.0 // ×÷ Õß : ÐÀÞ±µç×Ó // Éú&sup3;ÉÈÕÆÚ : 20200101 // ×î½üÐÞ¸Ä : // ¹¦ÄÜÃèÊö :Ö÷º¯Êý // ÐÞ¸ÄÀúÊ· : // ÈÕ ÆÚ : // ×÷ Õß : ÐÀÞ±µç×Ó // ÐÞ¸ÄÄÚÈÝ : ´´½¨Îļþ //°æÈ¨ËùÓУ¬µÁ°æ±Ø&frac34;¿¡£ //Copyright(C) ÐÀÞ±µç×Ó2020/3/16 //All rights reserved //******************************************************************************/. //&sup3;ÌÐòÍ·º¯Êý #include <reg52.h> #include <intrins.h> //°üº¬Í·Îļþ //ÏÔÊ&frac34;º¯Êý #include <display.h> //ºê¶¨Òå #define uint unsigned int #define uchar unsigned char //¹Ü½ÅÉùÃ÷ sbit LED_R= P2^2;//ºìµÆ sbit LED_G= P2^0;//ÂÌµÆ sbit FENG = P2^5;//·äÃùÆ÷ //sbit san=P3^4; //·çÉÈ¿ØÖÆ£¨Ñ¡Å䣩 sbit CS = P1^4; sbit Clk = P1^2; sbit DATI = P1^3; sbit DATO = P1^3; //ADC0832Òý½Å //°´¼ü sbit Key1=P2^6; //ÉèÖüü sbit Key2=P2^7; //¼Ó°´¼ü sbit Key3=P3^7; //¼õ°´¼ü bit bdata flag; //±¨&frac34;¯±êÖ&frac34;λ uchar set; //ÉèÖÃ״̬ /*******************************¶¨ÒåÈ«&frac34;Ö±äÁ¿********************************/ unsigned char dat = 0; //ADÖµ unsigned char CH=0; //ͨµÀ±äÁ¿ unsigned int sum=0; //ƽ&frac34;ùÖµ¼ÆËãʱµÄ×ÜÊý unsigned char m=0; //º¯ÊýÉùÃ÷ extern uchar ADC0809(); extern void Key(); //&frac34;Æ&frac34;«º¬Á¿±äÁ¿ uchar temp=0; uchar WARNING=25; //±¨&frac34;¯Öµ /**************************************************************************** º¯Êý¹¦ÄÜ:ADת»»×Ó&sup3;ÌÐò Èë¿Ú²ÎÊý:CH &sup3;ö¿Ú²ÎÊý:dat ****************************************************************************/ unsigned char adc0832(unsigned char CH) { unsigned char i,test,adval; adval = 0x00; test = 0x00; Clk = 0; //&sup3;õʼ»¯ DATI = 1; _nop_(); CS = 0; _nop_(); Clk = 1; _nop_(); if ( CH == 0x00 ) //ͨµÀÑ¡Ôñ { Clk = 0; DATI = 1; //ͨµÀ0µÄµÚһλ _nop_(); Clk = 1; _nop_(); Clk = 0; DATI = 0; //ͨµÀ0µÄµÚ¶þλ _nop_(); Clk = 1; _nop_(); } else { Clk = 0; DATI = 1; //ͨµÀ1µÄµÚһλ _nop_(); Clk = 1; _nop_(); Clk = 0; DATI = 1; //ͨµÀ1µÄµÚ¶þλ _nop_(); Clk = 1; _nop_(); } Clk = 0; DATI = 1; for( i = 0;i < 8;i++ ) //¶Áȡǰ8λµÄÖµ { _nop_(); adval <<= 1; Clk = 1; _nop_(); Clk = 0; if (DATO) adval |= 0x01; else adval |= 0x00; } for (i = 0; i < 8; i++) //¶ÁÈ¡ºó8λµÄÖµ { test >>= 1; if (DATO) test |= 0x80; else test |= 0x00; _nop_(); Clk = 1; _nop_(); Clk = 0; } if (adval == test) //±È½Ïǰ8λÓëºó8λµÄÖµ£¬Èç¹û²»ÏàͬÉáÈ¥¡£ÈôÒ»Ö±&sup3;öÏÖÏÔÊ&frac34;ΪÁ㣬Ç뽫¸ÃÐÐÈ¥µô dat = test; nop_(); CS = 1; //ÊÍ·ÅADC0832 DATO = 1; Clk = 1; return dat; } void init() //&sup3;õʼ»¯º¯Êý { TMOD=0x01; //¹¤×÷·½Ê½ TL0=0xb0; TH0=0x3c; //¸&sup3;&sup3;õÖµ£¨12MHz&frac34;§ÕñµÄ50ms£© EA=1; //´ò¿ªÖжÏ×Ü¿ª¹Ø ET0=1; //´ò¿ªÖжÏÔÊÐí¿ª¹Ø TR0=1; //´ò¿ª¶¨Ê±Æ÷¿ª¹Ø } void main() //Ö÷º¯Êý { Init1602();//&sup3;õʼ»¯ÏÔÊ&frac34; init(); //&sup3;õʼ»¯¶¨Ê±Æ÷ while(1) //½øÈëÑ­»· { for(m=0;m<50;m++) //¶Á50´ÎADÖµ sum = adc0832(0)+sum; //¶Áµ½µÄADÖµ£¬½«¶Áµ½µÄÊý&frac34;ÝÀÛ¼Óµ½sum temp=sum/50; //Ìø&sup3;öÉÏÃæµÄforÑ­»·ºó£¬½«ÀÛ¼ÓµÄ×ÜÊý&sup3;ýÒÔ50µÃµ½Æ½&frac34;ùÖµtemp sum=0; //ƽ&frac34;ùÖµ¼ÆËãÍê&sup3;ɺ󣬽«×ÜÊýÇåÁã if(set==0) //Ö»ÓÐÔÚ·ÇÉèÖÃ״̬ʱ£¬ Display_1602(temp,WARNING); //²ÅË¢ÐÂÏÔÊ&frac34;ʵʱŨ¶ÈÖµ if(temp<WARNING&&set==0) //·ÇÉèÖÃʱµ±Å¨¶ÈֵСÓÚ±¨&frac34;¯ÖµÊ± { flag=0; //±¨&frac34;¯±êÖ&frac34;λÖÃ0£¬²»±¨&frac34;¯ } else if(temp>WARNING&&set==0) //·ÇÉèÖÃʱµ±Å¨¶ÈÖµ´óÓÚ±¨&frac34;¯ÖµÊ± { flag=1; //±¨&frac34;¯±êÖ&frac34;λÖÃ1 } Key(); //ɨÃè°´¼ü } } void Key() //°´¼üº¯Êý { if(Key1==0) //ÉèÖüü°´ÏÂʱ { while(Key1==0); //¼ì²â°´¼üÊÇ·ñÊÍ·Å FENG=0; //·äÃùÆ÷Ïì set++; //ÉèÖÃ״̬±êÖ&frac34;¼Ó flag=0; //Í£Ö¹±¨&frac34;¯ // san=1; //·çÉÈֹͣת¶¯£¨Ñ¡Å䣩 TR0=0; //¶¨Ê±Æ÷Í£Ö¹ } if(set==1) //ÉèÖÃʱ { write_com(0x38);//ÆÁÄ»&sup3;õʼ»¯ write_com(0x80+0x40+13);//Ñ¡Öб¨&frac34;¯ÖµµÄλÖà write_com(0x0f);//´ò¿ªÏÔÊ&frac34; ÎÞ¹â±ê ¹â±êÉÁ˸ write_com(0x06);//µ±¶Á»òдһ¸ö×Ö·ûÊÇÖ¸Õëºóһһλ FENG=1; //·äÃùÆ÷Í£Ö¹ÃùÏì } else if(set>=2) //ÔÙ°´Ò»ÏÂÉèÖüüʱ£¬ÍË&sup3;öÉèÖà { set=0; //ÉèÖÃ״̬ÇåÁã write_com(0x38);//ÆÁÄ»&sup3;õʼ»¯ write_com(0x0c);//´ò¿ªÏÔÊ&frac34; ÎÞ¹â±ê ÎÞ¹â±êÉÁ˸ FENG=1; //·äÃùÆ÷Í£Ö¹Ïì flag=1; //±¨&frac34;¯±êÖ&frac34;λÖÃ1 TR0=1; //¶¨Ê±Æ÷¿ªÊ¼¼ÆÊ± } if(Key2==0&&set!=0) //µ±ÔÚÉèÖÃ״̬ʱ£¬°´Ï¼Ӽüʱ { while(Key2==0); //°´¼üÊÍ·Å FENG=0; //·äÃùÆ÷ÃùÏì WARNING++; //±¨&frac34;¯ãÐÖµ¼Ó if(WARNING>=255)//ãÐÖµ×î´ó¼Óµ½255 WARNING=0; //ÇåÁã write_com(0x80+0x40+11); //ÔÚãÐÖµµÄλÖÃдÈëÉèÖõÄÊý&frac34;Ý write_data(&#39;0&#39;+WARNING/100); //ÏÔÊ&frac34;°Ù루½«123&sup3;ýÒÔ100µÃµ½µÄÉÌÊÇ1£¬&frac34;ÍÊǰÙλÊý&frac34;Ý£©123ΪÀý×Ó write_data(&#39;0&#39;+WARNING/10%10);//ÏÔÊ&frac34;ʮ루½«123&sup3;ýÒÔ10µÃµ½ÉÌÊÇ12£¬½«12&sup3;ýÒÔ10µÄÓàÊý&frac34;ÍÊÇʮ룩 write_data(&#39;0&#39;+WARNING%10); //ÏÔÊ&frac34;¸ö루½«123&sup3;ýÒÔ10µÄÓàÊý3&frac34;ÍÊǸöλÊý&frac34;Ý£©123ΪÀý×Ó write_com(0x80+0x40+13);//λÖà FENG=1;//·äÃùÆ÷Í£Ö¹ } if(Key3==0&&set!=0) //¼õ°´¼ü×¢ÊͲο¼¼Ó°´¼ü²¿·Ö { while(Key3==0); FENG=0; WARNING--; if(WARNING<=0) WARNING=255; write_com(0x80+0x40+11); write_data(&#39;0&#39;+WARNING/100); write_data(&#39;0&#39;+WARNING/10%10); write_data(&#39;0&#39;+WARNING%10); write_com(0x80+0x40+13);//λÖà FENG=1; } } void time1_int(void) interrupt 1 //¶¨Ê±Æ÷º¯Êý { uchar count; TL0=0xb0; TH0=0x3c; //ÖØÐ¸&sup3;&sup3;õÖµ count++; //¼ÆÊ±±äÁ¿¼Ó if(count==10)//¶¨Ê±Æ÷¶¨Ê±ÊÇ50ms£¬´Ë´¦¼ÆÊý10´Î£¬ÕýºÃÊÇ500ms£¬ÓÃÓÚ±¨&frac34;¯Ê± µÆÁÁºÍ·äÃùÆ÷Ïì { if(flag==0) //±¨&frac34;¯±êÖ&frac34;Ϊ0ʱ { LED_G=0; //Â̵ÆÁÁ LED_R=1; //ºìµÆÃð FENG=1; //·äÃùÆ÷²»Ïì // san=1; //·çÉȲ»×ª£¨Ñ¡Å䣩 } if(flag==1) //±¨&frac34;¯±êÖ&frac34;λΪ1ʱ { LED_G=1; //Â̵ÆÃð LED_R=0; //ºìµÆÁÁ FENG=0; //·äÃùÆ÷Ïì // san=0; //·çÉÈת¶¯£¨Ñ¡Å䣩 } } if(count==20) //¼ÆÊýµ½20ʱ£¬ÕýºÃÊÇ1000ms£¬&frac34;ÍÊÇ1s£¬ÕâÀï&frac34;ÍÊÇÈõÆÃ𣬷äÃùÆ÷²»Ï죬´Ó¶ø×ö&sup3;öÉÁ˸µÄЧ¹û { count=0; //¼Æµ½1sʱ£¬½«countÇåÁ㣬׼±¸ÖØÐ¼ÆÊý if(flag==0) { LED_G=1; LED_R=1; FENG=1; // san=1; //È«²¿¹Ø±Õ } if(flag==1) { LED_G=1; LED_R=1; FENG=1; // san=0; //±¨&frac34;¯Öµ£¬·çÉÈÊÇһֱת¶¯µÄ£¨Ñ¡Å䣩 } } } 修改为下限报警
最新发布
07-05
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值