FlexʹÓÃ×é¼þ´¦ÀíÊý¾ÝºÍ½»»¥µ¼º½Àà×é¼þ(1)

2. µ¼º½Àà×é¼þ

?

2.1 ToggleButtonBar µ¼º½°´Å¥×é

ToggleButtonBar ÊÇButtonBar µÄ×ÓÀ࣬ÔöÇ¿À´µ¼º½¹¦ÄÜ£¬¿ÉÒÔ³ÖÐø±£³Ö¿Í»§¶Ë״̬¡£

ͬʱÔÚ½çÃæÉ϶Ե±Ç°µÄÑ¡ÖÐ״̬×öÃ÷È·µÄ±êʶ¡£

?

toggleOnClick ÊôÐÔÖ¸Ã÷ÊÇ·ñ¿ÉÒÔͨ¹ýµ¥»÷È¡ÏûÑ¡ÖеÄ״̬¡£true£ºµ±Êó±êµ¥»÷ÒѾ­Ñ¡Öеݴťʱ£¬¸Ã°´Å¥»Ö¸´µ½Õý³£×´Ì¬¡£false£ºÔò²»»á»Ö¸´¡£

?

itemClick="btn_click_handler(event);" ¼àÌýÓû§µÄµ¥»÷¶¯×÷¡£

?

Xml´úÂë icon_copy.gif

  1. ??
  2. <mx:application?xmlns:mx="http: www.adobe.com="" 2006="" mxml"?layout="absolute" ??<="" li="">
  3. ?creationComplete="initUI()">??
  4. ????<mx:style?source="style.css">??
  5. ????<mx:script>??
  6. ????????
  7. ????????????//µ¼Èëµã»÷ʼþ¶ÔÏó ?
  8. ????????????import?mx.events.ItemClickEvent;???????? ?
  9. ????????????internal?function?initUI():void{ ?
  10. ????????????????var?data_arr:Array?=?new?Array(); ?
  11. ????????????????data_arr.push("<span?class=hilite1>Flex"); ?
  12. ????????????????data_arr.push("Flash"); ?
  13. ????????????????data_arr.push("Flash?Media?Server"); ?
  14. ????????????????data_arr.push("<span?class=hilite1>Flex?Data?Server"); ?
  15. ????????????????//Ìí¼ÓÊý¾ÝÔ´ ?
  16. ????????????????btns.dataProvider?=?data_arr; ?
  17. ????????????} ?
  18. ????????????//´¦ÀíitemClickµã»÷ʼþ ?
  19. ????????????internal?function?btn_click_handler(evt:ItemClickEvent):void{ ?
  20. ????????????????tip_txt.text?=?"µã»÷µÄ°´Å¥£º"+evt.index+":"+evt.label; ?
  21. ????????????} ?
  22. ????????]]>??
  23. ????</mx:script>??
  24. ????<mx:togglebuttonbar?toggleonclick="true"?id="btns"?itemclick="btn_click_handler(event);"? ??<="" li="">
  25. horizontalGap="5"?x="22"?y="82">??
  26. ????</mx:togglebuttonbar>??
  27. ???? ??
  28. ????<mx:label?id="tip_txt"?text="»¹Ã»Óеã»÷ÄØ"?x="22"?y="126"?width="266">??
  29. ???? ??
  30. </mx:application>??

<mx:application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" ?creationcomplete="initUI()"> <mx:style source="style.css"> <mx:script> </mx:script> <mx:togglebuttonbar toggleonclick="true" id="btns" itemclick="btn_click_handler(event);" horizontalgap="5" x="22" y="82"> </mx:togglebuttonbar> <mx:label id="tip_txt" text="»¹Ã»Óеã»÷ÄØ" x="22" y="126" width="266"> </mx:application>

?

2.2? TabBar ±êÇ©×é

TabBar ÔÚToggleButtonBar µÄ»ù´¡ÉϼÌÐøÀ©Õ¹£¬¸Ä±äÁ˶ÔÑ¡ÖÐ״̬µÄ±íÏÖÐÎʽ£¬½«Ñ¡ÖÐÏîÒÔ±êÇ©µÄÐÎʽͻ³öÏÔʾ£¬Õâµã¸úTabNavigator Ïàͬ£¬²»¹ýËü²»°üÀ¨ÆäËû×Ó¼¶ÈÝÆ÷¡£

¿ÉºÍÈκÎ×é¼þ½áºÏʹÓ㬶ø²»½ö½öÏÞÓÚÈÝÆ÷¡£

TabBar ±¾ÉíÖ»°üÀ¨ÁËÒ»×é±êÇ©£¬Ã»ÓÐÆäËûÄÚÈÝ¡£

myViewstack.selectedIndex = evt.index;

½«TabBar µÄ°´Å¥Ë÷ÒýºÍViewStack µÄ±»Ñ¡ÖÐÔªËØµÄλÖùØÁªÆðÀ´¡£

Xml´úÂë icon_copy.gif

  1. ??
  2. <mx:application?xmlns:mx="http: www.adobe.com="" 2006="" mxml"?layout="absolute">??
  3. ???? ??
  4. ????<mx:style?source="style.css">??
  5. ????<mx:script>??
  6. ????????
  7. ???????? ?
  8. ????????????import?mx.events.ItemClickEvent;???????? ?
  9. ???????? ?
  10. ????????????internal?function?btn_click_handler(evt:ItemClickEvent):void{ ?
  11. ????????????????myViewstack.selectedIndex?=?evt.index; ?
  12. ????????????} ?
  13. ????????]]>??
  14. ????</mx:script>??
  15. ???? ??
  16. ????<mx:panel?x="43"?y="10"?width="366"?height="310"?layout="absolute"?horizontalgap="0"?verticalgap="0"?title="tabbarʵÀý"?borderstyle="solid">??
  17. ????<mx:tabbar?id="btns"?x="10"?y="10"?width="308"?itemclick="btn_click_handler(event)">??
  18. ????????<mx:dataprovider>??
  19. ????????????<mx:array>??
  20. ????????????????<mx:string><span?class=hilite1>Flex</mx:string>??
  21. ????????????????<mx:string>Flash</mx:string>??
  22. ????????????????<mx:string>FMS</mx:string>??
  23. ????????????????<mx:string>FDS</mx:string>??
  24. ????????????</mx:array>??
  25. ????????</mx:dataprovider>??
  26. ????</mx:tabbar>??
  27. ????<mx:viewstack?x="10"?y="40"?id="myviewstack"?width="308"?height="200">??
  28. ????????<mx:canvas?id="child1"?label="view?1"?width="100%"?height="100%">??
  29. ????????????<mx:list>??
  30. ????????????????<mx:array>??
  31. ????????????????????<mx:object?label="ÇëÑ¡ÔñÄú¸ÐÐËȤµÄ¼¼Êõ£º">?????????????????? ??
  32. ????????????????????<mx:object?label="flash">??
  33. ????????????????????<mx:object?label="<span?class=hilite1>Flex"/>??
  34. ????????????????????<mx:object?label="flash?media?server">??
  35. ????????????????????<mx:object?label="breeze">??
  36. ????????????????</mx:array>??
  37. ????????????</mx:list>??
  38. ????????</mx:canvas>??
  39. ????????<mx:canvas?id="child2"?label="view?2"?width="100%"?height="100%">??
  40. ????????????<mx:textinput?text="ÇëÊäÈëÄúµÄÓÊÏ䵨ַ"?>??
  41. ????????????<mx:button?x="168"?y="1"?label="¶©ÔÄflash?rss">??
  42. ????????</mx:canvas>??
  43. ????????<mx:canvas?id="child3"?label="view?3"?width="100%"?height="100%">??
  44. ????????????<mx:label?text="fms?2.0.4·¢²¼ÁË"?>??
  45. ????????</mx:canvas>??
  46. ????????<mx:canvas?id="child4"?label="view?4"?width="100%"?height="100%">??
  47. ????????????<mx:label?text="breeze"?>??
  48. ????????</mx:canvas>??
  49. ????</mx:viewstack>??
  50. ????</mx:panel>??
  51. ???? ??
  52. </mx:application>??

<mx:application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> <mx:style source="style.css"> <mx:script> </mx:script> <mx:panel x="43" y="10" width="366" height="310" layout="absolute" horizontalgap="0" verticalgap="0" title="TabBarʵÀý" borderstyle="solid"> <mx:tabbar id="btns" x="10" y="10" width="308" itemclick="btn_click_handler(event)"> <mx:dataprovider> <mx:array> <mx:string>Flex</mx:string> <mx:string>Flash</mx:string> <mx:string>FMS</mx:string> <mx:string>FDS</mx:string> </mx:array> </mx:dataprovider> </mx:tabbar> <mx:viewstack x="10" y="40" id="myViewstack" width="308" height="200"> <mx:canvas id="child1" label="View 1" width="100%" height="100%"> <mx:list> <mx:array> <mx:object label="ÇëÑ¡ÔñÄú¸ÐÐËȤµÄ¼¼Êõ£º"> <mx:object label="Flash"> <mx:object label="Flex"> <mx:object label="Flash Media server"> <mx:object label="Breeze"> </mx:array> </mx:list> </mx:canvas> <mx:canvas id="child2" label="View 2" width="100%" height="100%"> <mx:textinput text="ÇëÊäÈëÄúµÄÓÊÏ䵨ַ"> <mx:button x="168" y="1" label="¶©ÔÄFlash Rss"> </mx:canvas> <mx:canvas id="child3" label="View 3" width="100%" height="100%"> <mx:label text="FMS 2.0.4·¢²¼ÁË"> </mx:canvas> <mx:canvas id="child4" label="View 4" width="100%" height="100%"> <mx:label text="Breeze"> </mx:canvas> </mx:viewstack> </mx:panel> </mx:application>?

5.3 ʹÓò˵¥µ¼º½ -- ´´½¨Ò»¸ö¼òµ¥µÄ¶à¾Ã²Ëµ¥

ʹÓÃMenuBar ²Ëµ¥Ìõ×÷È«¾Öµ¼º½¡£

ÔÚʹÓÃAS ¶¨ÒåXML Êý¾Ýʱ£¬¿ÉÒÔʹÓû»Ðзû±£³ÖXMLÊý¾ÝµÄ¸ñʽ£¬Ö»ÒªXML µÄ±êÇ©ÕýÈ·£¬±àÒëÆ÷×Ô¶¯»áʶ±ð¡£

ÔÚnode ÔªËØÖÐµÄ enabled ÊôÐÔ ´ú±íÊÇ·ñ¿ÉÓã¬Ä¬ÈÏtrueΪ¿ÉÓã¬falseΪ²»¿ÉÓò˵¥Ïî±ä³É»ÒÉ«¡£

type ÊôÐÔ Îª separator ´ú±íÒ»¸ö·Ö¸îÏß¡£

?

XML ºÍ XMLList ¶¼ÊÇÓÃÀ´¶¨ÒåXML Êý¾Ý£¬²»Í¬µÄÊÇ£¬XMLList ÊǶà¸öXML Êý¾ÝµÄ¼¯ºÏ¡£

ÔÚÕâ¸öÀý×ÓÖУ¬mXMLÊÇXMLListÀàÐÍ£¬¸ù½Úµã±»ºöÂÔ£¬item ½Úµã±»½âÎöΪ¶ÀÁ¢µÄ XML Êý¾Ý¡£ item ½Úµã±ØÐëÓÐÒ»¸ö¸ù½Úµã£¬²»¿ÉºöÂÔ¡£

Xml´úÂë icon_copy.gif

  1. ??
  2. <mx:application?xmlns:mx="http: www.adobe.com="" 2006="" mxml"?layout="absolute" ?creationcomplete="initApp()">??
  3. ???? ??
  4. ????<mx:style?source="style.css">???????????? ??
  5. ????<mx:script>??
  6. ????????
  7. ????????????import?mx.controls.Alert;??????? ?
  8. ????????????import?mx.events.MenuEvent; ?
  9. ???????????? ?
  10. ????????????private?var?mXML:XML?= ?
  11. ????????????????<menu?label?=?"ϵͳ²Ëµ¥"> ?
  12. ????????????????????<item?label="Îļþ"> ?
  13. ????????????????????????<node?label="н¨»­°å"?data="new"> ?
  14. ????????????????????????<node?label="Çå³ý»­°å"?data="clear"?enabled="false"> ?
  15. ????????????????????????<node?type="separator"?> ?
  16. ????????????????????????<node?label="Í˳öϵͳ"?data="logout"> ?
  17. ????????????????????</item> ?
  18. ????????????????????<item?label="°ïÖú"> ?
  19. ????????????????????????<node?label="°ïÖú"?data="help"> ?
  20. ????????????????????????<node?label="¹ØÓÚ×÷Õß"?data="about"> ?
  21. ?????????????????????</item> ?
  22. ????????????????; ?
  23. ???????????? ?
  24. ????????????internal?function?initApp():void{ ?
  25. ????????????????//ΪMenuBarÌí¼ÓÊý¾ÝÔ´ ?
  26. ????????????????myMenu.dataProvider?=?mXML; ?
  27. ????????????????//¼àÌýMenuµÄµã»÷ʵ¼ù ?
  28. ????????????????myMenu.addEventListener(MenuEvent.ITEM_CLICK,menuClickHandler); ?
  29. ????????????} ?
  30. ???????????? ?
  31. ????????????internal?function?menuClickHandler(evt:MenuEvent):void{ ?
  32. ????????????????Alert.show("Ñ¡Ôñ²Ëµ¥£º"+evt.item.@data,"ÌáʾÐÅÏ¢"); ?
  33. ????????????} ?
  34. ????????]]>??
  35. ????</mx:script>??
  36. ????<mx:vbox?width="100%"?height="100%">??
  37. ????????<mx:canvas?stylename="windowbar"?width="100%">??
  38. ????????????<mx:menubar?labelfield="@label"??height="30"?id="mymenu"?width="100%"></mx:menubar>? ??
  39. ????????</mx:canvas>??
  40. ????????<mx:canvas?width="100%"?height="100%"?id="paper">??
  41. ???????????? ??
  42. ????????</mx:canvas>?????????? ??
  43. ????</mx:vbox>??
  44. ???? ??
  45. </mx:application>??

<mx:application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationcomplete="initApp()"> <mx:style source="style.css"> <mx:script> <item label="Îļþ"> <node label="н¨»­°å" data="new"> <node label="Çå³ý»­°å" data="clear" enabled="false"> <node type="separator"> <node label="Í˳öϵͳ" data="logout"> </item> <item label="°ïÖú"> <node label="°ïÖú" data="help"> <node label="¹ØÓÚ×÷Õß" data="about"> </item> ; internal function initApp():void{ //ΪMenuBarÌí¼ÓÊý¾ÝÔ´ myMenu.dataProvider = mXML; //¼àÌýMenuµÄµã»÷ʵ¼ù myMenu.addEventListener(MenuEvent.ITEM_CLICK,menuClickHandler); } internal function menuClickHandler(evt:MenuEvent):void{ Alert.show("Ñ¡Ôñ²Ëµ¥£º"+evt.item.@data,"ÌáʾÐÅÏ¢"); } ]]> </mx:script> <mx:vbox width="100%" height="100%"> <mx:canvas stylename="windowBar" width="100%"> <mx:menubar labelfield="@label" height="30" id="myMenu" width="100%"></mx:menubar> </mx:canvas> <mx:canvas width="100%" height="100%" id="paper"> </mx:canvas> </mx:vbox> </mx:application>?

2.4 PopUpButton ÏÂÀ­µ¯³ö´°¿Ú¿Ø¼þ

PopUpButton ÊÇÒ»¸öÌØÊâµÄButton£¬ ±¾ÉíÓÉÁ½¸öButton×é³É£ºÖ÷°´Å¥ºÍ×Ó°´Å¥¡£µã»÷×Ó°´Å¥¿ÉÒÔ½«ÈκÎ×é¼þ×÷Ϊ´°¿Úµ¯³ö£¬ÖÃÓÚ×îÉϲ㡣Õâ¸öµ¯³ö¶¯×÷ÓÉ PopUpMenuButton Íê³É¡£

PopUpButton µÄopen ʼþºÍ close ʼþ£ºµ¯³öºÍµ¯³ö´°¿Ú¹Ø±Õʱ´¥·¢¡£

popUp ÊôÐÔ£º½«Òªµ¯³öµÄ¶ÔÏó¡£

DropdownEvent.CLOSE ºÍ DropdownEvent.OPEN ʼþרÃÅÕë¶Ôµ¯³ö´°¿Ú¡£µã»÷Ö÷°´Å¥£¬´¥·¢µÄʼþºÍButton ÊÇÒ»ÑùµÄ£¬±ÈÈçclick¡£

?

Xml´úÂë icon_copy.gif

  1. ??
  2. <mx:application?xmlns:mx="http: www.adobe.com="" 2006="" mxml"?creationcomplete="initApp()" ?layout="absolute">??
  3. ????<mx:style>??
  4. ????????Application{ ??
  5. ????????????fontSize:12; ??
  6. ????????????backgroundGradientColors:?#c0c0c0,?#c0c0c0; ??
  7. ????????} ??
  8. ????</mx:style>??
  9. ????<mx:script>??
  10. ????????
  11. ????????????import?mx.containers.Panel;????? ?
  12. ????????????import?mx.controls.Alert;??? ?
  13. ????????????import?mx.events.DropdownEvent; ?
  14. ?
  15. ????????????private?var?panel:Panel; ?
  16. ?
  17. ????????????private?function?initApp():void?{ ?
  18. ????????????????panel?=?new?Panel();??//ÉùÃ÷еÄPanel ?
  19. ????????????????panel.title?=?"panel"; ?
  20. ????????????????panel.width?=?200; ?
  21. ????????????????panel.height?=?200; ?
  22. ????????????????popBtn.popUp?=?panel;???????????//Ö¸¶¨popUpÄ¿±ê¶ÔÏó??????? ?
  23. ????????????????popBtn.addEventListener(DropdownEvent.CLOSE,closeHandler);??//?????????? ?
  24. ????????????????popBtn.open();??????//½«´°¿Úµ¯³ö ?
  25. ????????????}??????????? ?
  26. ?
  27. ???????????? ?
  28. ????????????private?function?closeHandler(evt:DropdownEvent):void{ ?
  29. ????????????????Alert.show("¹Ø±Õ´°¿Ú"); ?
  30. ????????????} ?
  31. ????????]]>??
  32. ????</mx:script>??
  33. ????<mx:popupbutton?id="popbtn"?label="µ¯³ö"?width="135"??x="23"?y="23">??
  34. ???? ??
  35. </mx:application>??

<mx:application xmlns:mx="http://www.adobe.com/2006/mxml" creationcomplete="initApp()" layout="absolute"> <mx:style> Application{ fontSize:12; backgroundGradientColors: #c0c0c0, #c0c0c0; } </mx:style> <mx:script> </mx:script> <mx:popupbutton id="popBtn" label="µ¯³ö" width="135" x="23" y="23"> </mx:application>?

2.5 PopUpMenuButton

¼Ì³Ð×ÔPopUpButton£¬ÊÇ PopUpButtonµÄÒ»¸öÌØÊâʵÀý¡£Ö»ÄܰÑMenu µ±×÷µ¯³ö´°¿Ú£¬ÇÒMenu Ö»ÄÜÓÐ1¸ø²ã¼¶¡£

Menu ÓÃÀ´´´½¨²Ëµ¥£¬²»¹ýºÍ MenuÏà±È£¬ËüÉÙÁ˲˵¥Ìõ¡£ÇÒûÓжÔÓ¦µÄMXML±êÇ©£¬Ö»ÄÜÓÉ´úÂë´´½¨¡£

PopUpMenuButton ÖÐÄÚÖÃÁËÒ»¸öMenu ¡£

¶¨ÒåXML Êý¾Ý£¬½«Ëü´«¸ø PopUpMenuButton µÄ dataProvider £¬×÷ΪÄÚÖõÄMenu µÄÊý¾ÝÔ´¡£

MenuEvent.ITEM_CLICK ʼþ£ºµ±²Ëµ¥ÏѡÖÐʱ£¬Ê¼þ±»´¥·¢£¬Í¬Ê±²Ëµ¥¹Ø±Õ¡£

Xml´úÂë icon_copy.gif

  1. ??
  2. <mx:application?xmlns:mx="http: www.adobe.com="" 2006="" mxml"?creationcomplete="initApp()" ?layout="absolute">??
  3. ????<mx:style>??
  4. ????????Application{ ??
  5. ????????????fontSize:12; ??
  6. ????????????backgroundGradientColors:?#c0c0c0,?#c0c0c0; ??
  7. ????????} ??
  8. ????</mx:style>??
  9. ????<mx:script>??
  10. ????????
  11. ????????????import?mx.controls.Alert;??? ?
  12. ????????????import?mx.events.MenuEvent; ?
  13. ???????????? ?
  14. ????????????private?var?mXML:XMLList?= ?
  15. ????????????????<> ?
  16. ????????????????????<node?label="Îļþ"> ?
  17. ????????????????????????<node?label="н¨»­°å"?data="new"> ?
  18. ????????????????????????<node?label="Çå³ý»­°å"?data="clear"?enabled="false"> ?
  19. ????????????????????????<node?label="Í˳öϵͳ"?data="logout"> ?
  20. ????????????????????</node> ?
  21. ????????????????????<node?label="¹¤¾ß">???????????????????????? ?
  22. ????????????????????<node?label="°ïÖú"> ?
  23. ????????????????????????<node?label="°ïÖú"?data="help"> ?
  24. ????????????????????????<node?label="¹ØÓÚ×÷Õß"?data="about"> ?
  25. ?????????????????????</node> ?
  26. ????????????????; ?
  27. ????????????private?function?initApp():void?{ ?
  28. ????????????????popBtn.dataProvider?=?mXML;?//µ¯³ö²Ëµ¥µÄÊý¾ÝÔ´ ?
  29. ????????????????popBtn.addEventListener(MenuEvent.ITEM_CLICK,clickHandler);? ?
  30. ????????????}??????????? ?
  31. ????????????private?function?clickHandler(evt:MenuEvent):void{ ?
  32. ????????????????Alert.show("Ñ¡Ôñ²Ëµ¥£º"+evt.label+":²Ëµ¥ÐòºÅ£º"+evt.index); ?
  33. ????????????} ?
  34. ????????]]>??
  35. ????</mx:script>??
  36. ????<mx:popupmenubutton?id="popbtn"?labelfield="@label"?width="135"??x="23"?y="23">??
  37. ???? ??
  38. </mx:application>??

1.8 DataGrid ×é¼þ -- ÖÆ×÷ͼÊéÑ¡¹ºÁбí

DataGrid×é¼þµÄ×÷ÓúÍHTMLÒ³ÃæÖеıí¸ñÀàËÆ£¬½«Êý¾ÝÒÔÐС¢ÁеĸñʽÏÔʾ³öÀ´¡£

?

ÿһ×ÝÁеĿí¶È²»¶¨£¬Óû§¿ÉÒÔÔÚÔËÐÐʱµ÷Õû¿í¶È¡£

¿ÉÔÚÔËÐÐʱµ÷ÕûÁеÄ˳Ðò

µã»÷ÁбêÌâÀ¸¿É¶ÔÁÐÊý¾Ý½øÐÐÅÅÐò

¿ÉÒÔ×Ô¶¨ÒåÿÁеıêÌâÀ¸

ºÍList×é¼þÒ»Ñù£¬¿ÉÒÔ×Ô¶¨Òåÿ¸öµ¥Ôª¸ñµÄitemRenderer

?

ʹÓÃModel¶¨ÒåÊý¾ÝÔ´£¬

columns ¶¨ÒåÁËËùÓеÄÁУ¬ÆäÖÐDataGridColumn ´ú±íÒ»ÁеÄÐÅÏ¢£¬dataFieldµÄÖµ²»¿ÉÊ¡ÂÔ£¬Õâ¸öÖµ±ØÐëÊÇÊý¾ÝÔ´ÖÐÿÌõÊý¾Ý°üº¬µÄÊôÐÔÃû£¬·ñÔòÎÞ·¨ÏÔʾ¡£headerText ±íʾÁбêÌâ¡£

rowCount ±íʾÏÔʾµÄÐÐÊý£¬Èç¹ûheightûÓÐÉèÖã¬ÔòÓÃÕâ¸öÊôÐÔÀ´¼¼Êõ¸ß¶È¡£height=rowCount*rowHeightÐиߡ£

selectedItem ÊôÐÔ´ú±íµ±Ç°Ñ¡ÖÐÐеÄÊý¾Ý£¬¿ÉÒÔÔÚÊý¾Ý°ó¶¨ÖУ¬µ±ËüµÄÖµ·¢Éú±ä»¯Ê±£¬Ê¹ÓøÃÊôÐÔµÄÈκÎÎï¼þ¶¼»á×Ô¶¯¸üС£

?

½Ó×ÅÎÒÃÇÀûÓÃitemRenderer ÔÚDataGridÖмÓÈ븴ѡ¿ò´´½¨×é¼þ£º

ÔÚ×é¼þÖÐÌí¼ÓÒ»¸ö¸´Ñ¡¿ò¡£²¢Ìí¼ÓchangeʼþµÄ·½·¨addCart¡£

this.parentApplication ±íʾ¸¸Application£¬¾ÍÊÇÎÒÃǺóÃæÊ¹ÓøÃ×é¼þµÄApplication¡£

new cartEvent(data,cart_check.selected)

addCart ·½·¨´´½¨ÁËÒ»¸ö×Ô¶¨Òåʼþ cartEvent ʼþ£¬²¢ÇÒ½«±ØÒªµÄÊôÐÔ´«µ½¸Ãʼþ£¬

È»ºóͨ¹ý dispatchEvent ÅÉ·¢¸Ãʼþ¡£

?

Xml´úÂë icon_copy.gif

  1. ??
  2. <mx:canvas?xmlns:mx="http: www.adobe.com="" 2006="" mxml"="">??
  3. ????<mx:script>??
  4. ????????
  5. ????????????import?bookEvent.cartEvent; ?
  6. ????????????internal?function?addCart():void{ ?
  7. ????????????????this.parentApplication.dispatchEvent(new?cartEvent(data,cart_check.selected)); ?
  8. ????????????} ?
  9. ????????]]>??
  10. ????</mx:script>??
  11. ????<mx:checkbox?id="cart_check"?x="0"?y="0"?label="¹ºÂò"?change="addcart()">??
  12. </mx:canvas>??

<mx:canvas xmlns:mx="http://www.adobe.com/2006/mxml"> <mx:script> </mx:script> <mx:checkbox id="cart_check" x="0" y="0" label="¹ºÂò" change="addCart()"></mx:canvas>

ÒÔÏÂΪ¶¨ÒåÒ»¸öcartEvent ʼþÀࣺ

ËùÓеÄʼþ¼Ì³ÐEvent£¬ ÔÚ¹¹Ô캯ÊýÖж¨ÒåÁËÁ½¸ö²ÎÊý£º_data ºÍ _isAdd£¬´´½¨Ê¼þµÄʱºò£¬½«Í¨¹ýÕâÁ½¸ö²ÎÊý½«ÐÅÏ¢´«ÈëʼþÖС£

super("AddBook") µ÷Óø¸ÀàEvent µÄ¹¹Ô캯Êý£¬²¢°ÑʼþÀàÐÍ¡°AddBook¡±´«µÝ¹ýÈ¥¡£Ö»Óе÷ÓÃÁ˸¸ÀàµÄ¹¹Ô캯Êý£¬²ÅÄܳÉÎªÕæÕýµÄʼþ¶ÔÏó¡£

Xml´úÂë icon_copy.gif

  1. package?bookEvent ??
  2. { ??
  3. ????import?flash.events.Event; ??
  4. ??
  5. ????public?class?cartEvent?extends?Event{ ??
  6. ????????public?var?isAdd:Boolean; ??
  7. ????????public?var?book:Object; ??
  8. ????????function?cartEvent(_data:Object,_isAdd:Boolean):void{ ??
  9. ????????????isAdd?=?_isAdd; ??
  10. ????????????book?=?_data; ??
  11. ???????????? ??
  12. ????????????super("AddBook"); ??
  13. ????????} ??
  14. ????} ??
  15. }??

package bookEvent{ import flash.events.Event; public class cartEvent extends Event{ public var isAdd:Boolean; public var book:Object; function cartEvent(_data:Object,_isAdd:Boolean):void{ isAdd = _isAdd; book = _data; super("AddBook"); } }}?

½ÓÏÂÀ´ÊÇÖ÷³ÌÐò¡£

ÔÚ³ÌÐò³õʼ»¯º¯ÊýÖУ¬addEventListener("AddBook",AddHandler) Ϊµ±Ç°¶ÔÏóÌí¼ÓÁ˶ÔAddBookʼþµÄ¼àÌý¡£

Xml´úÂë icon_copy.gif

  1. ??
  2. <mx:application?xmlns:mx="http: www.adobe.com="" 2006="" mxml"?fontsize="12" ?creationcomplete="initApp()">??
  3. ????????<mx:script>??
  4. ????????????
  5. ????????????????import?mx.events.DataGridEvent; ?
  6. ????????????????import?mx.events.DataGridEventReason ?
  7. ????????????????import?bookEvent.cartEvent; ?
  8. ????????????????import?view.*; ?
  9. ???????????????? ?
  10. ????????????????internal?function?initApp():void{ ?
  11. ????????????????????addEventListener("AddBook",AddHandler); ?
  12. ????????????????} ?
  13. ????????????????internal?function?AddHandler(evt:cartEvent):void{ ?
  14. ????????????????????if(evt.isAdd){ ?
  15. ????????????????????????tip_txt.text?=?"ÄãÑ¡Ôñ¹ºÂò£º"+evt.book.name; ?
  16. ????????????????????}else{ ?
  17. ????????????????????????tip_txt.text?=?"Äã·ÅÆú¹ºÂò£º"+evt.book.name; ?
  18. ????????????????????} ?
  19. ????????????????} ?
  20. ???????????????? ?
  21. ????????????????internal?function?checkInfo(evt:DataGridEvent):void{ ?
  22. ????????????????????//Èç¹ûûÓÐ×÷ÐÞ¸Ä ?
  23. ????????????????????if?(evt.reason?==?DataGridEventReason.CANCELLED){ ?
  24. ????????????????????????return; ?
  25. ????????????????????} ?
  26. ????????????????????//È·¶¨Ð޸ĵÄÊôÐÔ ?
  27. ????????????????????if(evt.dataField?==?"date"){ ?
  28. ????????????????????????//?Çå³ýÔ­À´µÄÊý¾Ý ?
  29. ????????????????????????evt.preventDefault(); ?
  30. ????????????????????????//?µÃµ½ÐµÄÊý¾Ý ?
  31. ????????????????????????book_DG.editedItemRenderer.data.date?=?dateCell(DataGrid(evt.target).itemEditorInstance).num_year.value; ?
  32. ????????????????????????//?¹Ø±Õitem?editor ?
  33. ????????????????????????book_DG.destroyItemEditor();? ?
  34. ????????????????????????//¸üÐÂÊý¾ÝÔ´? ?
  35. ????????????????????????book_DG.dataProvider.itemUpdated(evt.itemRenderer.data); ?
  36. ????????????????????} ?
  37. ????????????????} ?
  38. ????????????]]>??
  39. ????????</mx:script>??
  40. ????????<mx:model?id="books">??
  41. ????????????<datas>??
  42. ????????????????<book>??
  43. ????????????????????<name>FlashµÚÒ»²½</name>??
  44. ????????????????????<author>³Â±ù</author>??
  45. ????????????????????<date>2006</date>??
  46. ????????????????</book>??
  47. ????????????????<book>??
  48. ????????????????????<name>FlexµÚÒ»²½</name>??
  49. ????????????????????<author>walktree</author>??
  50. ????????????????????<date>2007</date>??
  51. ????????????????</book>??
  52. ????????????????<book>??
  53. ????????????????????<name>ApolloµÚÒ»²½</name>??
  54. ????????????????????<author>»¹²»ÖªµÀÄØ</author>??
  55. ????????????????????<date>2008</date>??
  56. ????????????????</book>??
  57. ????????????</datas>??
  58. ????????</mx:model>???? ??
  59. ????????<mx:label?width="100%"?color="#004080"?text="Ñ¡ÔñÒ»±¾Ê鹺Âò">??
  60. ????????<mx:datagrid?editable="true"?id="book_dg"?width="100%"?height="156"?itemeditend="checkinfo(event)"?rowcount="5"?dataprovider="{books.book}">??
  61. ????????????<mx:columns>??
  62. ????????????????<mx:datagridcolumn?datafield="name"?headertext="ÊéÃû">??
  63. ????????????????<mx:datagridcolumn?datafield="author"?headertext="×÷Õß">??
  64. ????????????????<mx:datagridcolumn?datafield="date"?headertext="³ö°æÈÕÆÚ"?itemeditor="view.datecell"?>??
  65. ????????????????<mx:datagridcolumn?headertext="¹ºÂò"?itemrenderer="view.cartcell"?editable="false">??
  66. ????????????</mx:columns>??
  67. ????????</mx:datagrid>??
  68. ???????? ??
  69. ????????<mx:canvas?height="150"?width="100%"?backgroundcolor="#ffffff">??
  70. ????????<mx:label?id="tip_txt"?text="»¹Ã»ÓÐÑ¡ÔñÊéÄ¿">??? ??
  71. ????????</mx:canvas>??
  72. ??
  73. </mx:application>??

<mx:application xmlns:mx="http://www.adobe.com/2006/mxml" fontsize="12" creationcomplete="initApp()"> <mx:script> </mx:script> <mx:model id="books"> <datas> <book> <name>FlashµÚÒ»²½</name> <author>³Â±ù</author> <date>2006</date> </book> <book> <name>FlexµÚÒ»²½</name> <author>walktree</author> <date>2007</date> </book> <book> <name>ApolloµÚÒ»²½</name> <author>»¹²»ÖªµÀÄØ</author> <date>2008</date> </book> </datas> </mx:model> <mx:label width="100%" color="#004080" text="Ñ¡ÔñÒ»±¾Ê鹺Âò"> <mx:datagrid editable="true" id="book_DG" width="100%" height="156" itemeditend="checkInfo(event)" rowcount="5" dataprovider="{books.book}"> <mx:columns> <mx:datagridcolumn datafield="name" headertext="ÊéÃû"> <mx:datagridcolumn datafield="author" headertext="×÷Õß"> <mx:datagridcolumn datafield="date" headertext="³ö°æÈÕÆÚ" itemeditor="view.dateCell"> <mx:datagridcolumn headertext="¹ºÂò" itemrenderer="view.cartCell" editable="false"> </mx:columns> </mx:datagrid> <mx:canvas height="150" width="100%" backgroundcolor="#ffffff"> <mx:label id="tip_txt" text="»¹Ã»ÓÐÑ¡ÔñÊéÄ¿"> </mx:canvas></mx:application>

?

´ËÍ⻹ÓÐheaderRenderer ¿ØÖƱêÌâÀ¸µÄ½çÃæ ºÍ itemEditor ¿ØÖƵ¥Ôª¸ñÖб༭״̬ϵĽçÃæ£¬Ê¹ÓøúitemRendererÒ»Ñù¡£ÒªÊ¹ÓÃitemEditor±ØÐ뽫DataGrid µÄeditable ÊôÐÔÉèΪtrue¡£»¹ÒªÉèÖú¯ÊýÀ´´¦Àí±à¼­Íê³Éʼþ£¬¸üÐÂÊý¾Ý¡£Ö÷³ÌÐò´úÂë¼ûÉÏÃæ ¡£

?

½Ó×ÅÎÒÃÇÔÙ¶¨ÒåÒ»¸ö×é¼þ£º

ÔÚÏÂÃæµÄ×é¼þÖУ¬Ê¹ÓÃÁËNumericStepper Êý×ÖÑ¡Ôñ¿Ø¼þÀ´Ìṩ±ã½Ý²Ù×÷¡£

ÔÚÓû§Íê³É±à¼­µ¥Ôª¸ñÊý¾Ýºó£¬itemEditEndʼþ½«±»´¥·¢£¬DataGridEvent ʼþ±»ÅÉ·¢³öÈ¥£¬Òò´ËʹÓüàÌýº¯Êý£ºitemEditEnd="checkInfo(event)"

if (evt.reason == DataGridEventReason.CANCELLED) ¼ì²éʼþµÄÀàÐÍ

Xml´úÂë icon_copy.gif

  1. ??
  2. <mx:canvas?xmlns:mx="http: www.adobe.com="" 2006="" mxml"?width="180">??
  3. ????<mx:numericstepper?id="num_year"?x="0"?y="0"?minimum="1900"?maximum="2100"?value="{data.date}">??
  4. ????<mx:label?text="ÇëÑ¡ÔñÄê·Ý"?x="96"?y="2">??
  5. </mx:canvas>??

/** **************************************************************************************************** * @file usart.c * @author ÕýµãÔ­×ÓÍŶÓ(ALIENTEK) * @version V1.1 * @date 2023-06-05 * @brief ´®¿Ú³õÊ&frac14;»¯´úÂë(Ò»°ãÊÇ´®¿Ú1)£¬Ö§³Öprintf * @license Copyright (c) 2020-2032, &sup1;ãÖÝÊÐÐÇÒíµç×Ó¿Æ&frac14;&frac14;ÓÐÏÞ&sup1;«Ë¾ **************************************************************************************************** * @attention * * ʵÑéÆ&frac12;̨:ÕýµãÔ­×Ó Ì&frac12;Ë÷Õß F407¿ª·¢°å * ÔÚÏßÊÓÆµ:www.yuanzige.com * &frac14;&frac14;ÊõÂÛ̳:www.openedv.com * &sup1;«Ë¾ÍøÖ·:www.alientek.com * &sup1;ºÂòµØÖ·:openedv.taobao.com * * ÐÞ¸Ä˵Ã÷ * V1.0 20211014 * µÚÒ»´Î·¢²&frac14; * V1.1 20230605 * ɾ³ýUSART_UX_IRQHandler()º¯ÊýµÄ³¬Ê±´¦ÀíºÍÐÞ¸ÄHAL_UART_RxCpltCallback() **************************************************************************************************** */ #include "./SYSTEM/sys/sys.h" #include "./SYSTEM/usart/usart.h" /* Èç&sup1;ûÊ&sup1;ÓÃos,Ôò°üÀ¨ÏÂÃæµÄÍ·ÎÄ&frac14;þ&frac14;´¿É */ #if SYS_SUPPORT_OS #include "os.h" /* os Ê&sup1;Óà */ #endif /******************************************************************************************/ /* &frac14;ÓÈëÒÔÏ´úÂë, Ö§³Öprintfº¯Êý, ¶ø²»ÐèҪѡÔñuse MicroLIB */ #if 1 #if (__ARMCC_VERSION >= 6010050) /* Ê&sup1;ÓÃAC6±àÒëÆ÷ʱ */ __asm(".global __use_no_semihosting\n\t"); /* ÉùÃ÷²»Ê&sup1;ÓðëÖ÷»úÄ£Ê&frac12; */ __asm(".global __ARM_use_no_argv \n\t"); /* AC6ÏÂÐèÒªÉùÃ÷mainº¯ÊýΪÎÞ²ÎÊý¸ñÊ&frac12;£¬·ñÔò²¿·ÖÀý³Ì¿ÉÄܳöÏÖ°ëÖ÷»úÄ£Ê&frac12; */ #else /* Ê&sup1;ÓÃAC5±àÒëÆ÷ʱ, ÒªÔÚÕâÀﶨÒå__FILE ºÍ ²»Ê&sup1;ÓðëÖ÷»úÄ£Ê&frac12; */ #pragma import(__use_no_semihosting) struct __FILE { int handle; /* Whatever you require here. If the only file you are using is */ /* standard output using printf() for debugging, no file handling */ /* is required. */ }; #endif /* ²»Ê&sup1;ÓðëÖ÷»úÄ£Ê&frac12;£¬ÖÁÉÙÐèÒªÖØ¶¨Òå_ttywrch\_sys_exit\_sys_command_stringº¯Êý,ÒÔͬʱ&frac14;æÈÝAC6ºÍAC5Ä£Ê&frac12; */ int _ttywrch(int ch) { ch = ch; return ch; } /* ¶¨Òå_sys_exit()ÒÔ±ÜÃâÊ&sup1;ÓðëÖ÷»úÄ£Ê&frac12; */ void _sys_exit(int x) { x = x; } char *_sys_command_string(char *cmd, int len) { return NULL; } /* FILE ÔÚ stdio.hÀïÃæ¶¨Òå. */ FILE __stdout; /* ÖØ¶¨Òåfputcº¯Êý, printfº¯Êý×îÖÕ»áͨ&sup1;ýµ÷ÓÃfputcÊä³ö×Ö·û´®µ&frac12;´®¿Ú */ int fputc(int ch, FILE *f) { while ((USART1->SR & 0X40) == 0); /* µÈ´ýÉÏÒ»¸ö×Ö·û·¢ËÍÍê³É */ USART1->DR = (uint8_t)ch; /* &frac12;«Òª·¢Ë͵Ä×Ö·û ch дÈëµ&frac12;DR&frac14;Ä´æÆ÷ */ return ch; } #endif /***********************************************END*******************************************/ #if USART_EN_RX /* Èç&sup1;ûÊ&sup1;ÄÜÁË&frac12;ÓÊÕ */ /* &frac12;ÓÊÕ»º³å, ×î´óUSART_REC_LEN¸ö×Ö&frac12;Ú. */ uint8_t g_usart_rx_buf[USART_REC_LEN]; /* &frac12;ÓÊÕ״̬ * bit15£¬ &frac12;ÓÊÕÍê³É±êÖ¾ * bit14£¬ &frac12;ÓÊÕµ&frac12;0x0d * bit13~0£¬ &frac12;ÓÊÕµ&frac12;µÄÓÐЧ×Ö&frac12;ÚÊýÄ¿ */ uint16_t g_usart_rx_sta = 0; uint8_t g_rx_buffer[RXBUFFERSIZE]; /* HAL¿âÊ&sup1;ÓõĴ®¿Ú&frac12;ÓÊÕ»º³å */ UART_HandleTypeDef g_uart1_handle; /* UART¾ä±ú */ /** * @brief ´®¿ÚX³õÊ&frac14;»¯º¯Êý * @param baudrate: ²¨ÌØÂÊ, ¸ù¾Ý×Ô&frac14;ºÐèÒªÉèÖò¨ÌØÂÊÖµ * @note ×¢Òâ: ±ØÐëÉèÖÃÕýÈ·µÄʱÖÓÔ´, ·ñÔò´®¿Ú²¨ÌØÂʾͻáÉèÖÃÒì³£. * ÕâÀïµÄUSARTµÄʱÖÓÔ´ÔÚsys_stm32_clock_init()º¯ÊýÖÐÒѾ­ÉèÖÃ&sup1;ýÁË. * @retval ÎÞ */ void usart_init(uint32_t baudrate) { g_uart1_handle.Instance = USART_UX; /* USART1 */ g_uart1_handle.Init.BaudRate = baudrate; /* ²¨ÌØÂÊ */ g_uart1_handle.Init.WordLength = UART_WORDLENGTH_8B; /* ×Ö³¤Îª8λÊý¾Ý¸ñÊ&frac12; */ g_uart1_handle.Init.StopBits = UART_STOPBITS_1; /* Ò»¸öÍ£Ö&sup1;λ */ g_uart1_handle.Init.Parity = UART_PARITY_NONE; /* ÎÞÆæÅ&frac14;УÑéλ */ g_uart1_handle.Init.HwFlowCtl = UART_HWCONTROL_NONE; /* ÎÞÓ²&frac14;þÁ÷¿Ø */ g_uart1_handle.Init.Mode = UART_MODE_TX_RX; /* ÊÕ·¢Ä£Ê&frac12; */ HAL_UART_Init(&g_uart1_handle); /* HAL_UART_Init()»áÊ&sup1;ÄÜUART1 */ /* ¸Ãº¯Êý»á¿ªÆô&frac12;ÓÊÕÖжϣº±ê־λUART_IT_RXNE£¬²¢ÇÒÉèÖÃ&frac12;ÓÊÕ»º³åÒÔ&frac14;°&frac12;ÓÊÕ»º³å&frac12;ÓÊÕ×î´óÊý¾ÝÁ¿ */ HAL_UART_Receive_IT(&g_uart1_handle, (uint8_t *)g_rx_buffer, RXBUFFERSIZE); } /** * @brief UARTµ×²ã³õÊ&frac14;»¯º¯Êý * @param huart: UART¾ä±úÀàÐÍÖ¸Õë * @note ´Ëº¯Êý»á±»HAL_UART_Init()µ÷Óà * Íê³ÉʱÖÓÊ&sup1;ÄÜ£¬Òý&frac12;ÅÅäÖã¬ÖжÏÅäÖà * @retval ÎÞ */ void HAL_UART_MspInit(UART_HandleTypeDef *huart) { GPIO_InitTypeDef gpio_init_struct; if(huart->Instance == USART_UX) /* Èç&sup1;ûÊÇ´®¿Ú1£¬&frac12;øÐд®¿Ú1 MSP³õÊ&frac14;»¯ */ { USART_UX_CLK_ENABLE(); /* USART1 ʱÖÓÊ&sup1;ÄÜ */ USART_TX_GPIO_CLK_ENABLE(); /* ·¢ËÍÒý&frac12;ÅʱÖÓÊ&sup1;ÄÜ */ USART_RX_GPIO_CLK_ENABLE(); /* &frac12;ÓÊÕÒý&frac12;ÅʱÖÓÊ&sup1;ÄÜ */ gpio_init_struct.Pin = USART_TX_GPIO_PIN; /* TXÒý&frac12;Å */ gpio_init_struct.Mode = GPIO_MODE_AF_PP; /* ¸´ÓÃÍÆÍìÊä³ö */ gpio_init_struct.Pull = GPIO_PULLUP; /* ÉÏÀ­ */ gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH; /* ¸ßËÙ */ gpio_init_struct.Alternate = USART_TX_GPIO_AF; /* ¸´ÓÃΪUSART1 */ HAL_GPIO_Init(USART_TX_GPIO_PORT, &gpio_init_struct); /* ³õÊ&frac14;»¯·¢ËÍÒý&frac12;Å */ gpio_init_struct.Pin = USART_RX_GPIO_PIN; /* RXÒý&frac12;Å */ gpio_init_struct.Alternate = USART_RX_GPIO_AF; /* ¸´ÓÃΪUSART1 */ HAL_GPIO_Init(USART_RX_GPIO_PORT, &gpio_init_struct); /* ³õÊ&frac14;»¯&frac12;ÓÊÕÒý&frac12;Å */ #if USART_EN_RX HAL_NVIC_EnableIRQ(USART_UX_IRQn); /* Ê&sup1;ÄÜUSART1ÖжÏͨµÀ */ HAL_NVIC_SetPriority(USART_UX_IRQn, 3, 3); /* ÇÀÕ&frac14;ÓÅÏÈ&frac14;¶3£¬×ÓÓÅÏÈ&frac14;¶3 */ #endif } } /** * @brief Rx´«Ê仨µ÷º¯Êý * @param huart: UART¾ä±úÀàÐÍÖ¸Õë * @retval ÎÞ */ void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if(huart->Instance == USART_UX) /* Èç&sup1;ûÊÇ´®¿Ú1 */ { if((g_usart_rx_sta & 0x8000) == 0) /* &frac12;ÓÊÕδÍê³É */ { if(g_usart_rx_sta & 0x4000) /* &frac12;ÓÊÕµ&frac12;ÁË0x0d */ { if(g_rx_buffer[0] != 0x0a) { g_usart_rx_sta = 0; /* &frac12;ÓÊÕ´íÎó,ÖØÐ¿ªÊ&frac14; */ } else { g_usart_rx_sta |= 0x8000; /* &frac12;ÓÊÕÍê³ÉÁË */ } } else /* »&sup1;ûÊÕµ&frac12;0X0D */ { if(g_rx_buffer[0] == 0x0d) { g_usart_rx_sta |= 0x4000; } else { g_usart_rx_buf[g_usart_rx_sta & 0X3FFF] = g_rx_buffer[0] ; g_usart_rx_sta++; if(g_usart_rx_sta > (USART_REC_LEN - 1)) { g_usart_rx_sta = 0; /* &frac12;ÓÊÕÊý¾Ý´íÎó,ÖØÐ¿ªÊ&frac14;&frac12;ÓÊÕ */ } } } } HAL_UART_Receive_IT(&g_uart1_handle, (uint8_t *)g_rx_buffer, RXBUFFERSIZE); } } /** * @brief ´®¿Ú1ÖжϷþÎñº¯Êý * @param ÎÞ * @retval ÎÞ */ void USART_UX_IRQHandler(void) { #if SYS_SUPPORT_OS /* Ê&sup1;ÓÃOS */ OSIntEnter(); #endif HAL_UART_IRQHandler(&g_uart1_handle); /* µ÷ÓÃHAL¿âÖжϴ¦Àí&sup1;«Óú¯Êý */ #if SYS_SUPPORT_OS /* Ê&sup1;ÓÃOS */ OSIntExit(); #endif } #endif /** **************************************************************************************************** * @file usart.c * @author ÕýµãÔ­×ÓÍŶÓ(ALIENTEK) * @version V1.1 * @date 2023-06-05 * @brief ´®¿Ú³õÊ&frac14;»¯´úÂë(Ò»°ãÊÇ´®¿Ú1)£¬Ö§³Öprintf * @license Copyright (c) 2020-2032, &sup1;ãÖÝÊÐÐÇÒíµç×Ó¿Æ&frac14;&frac14;ÓÐÏÞ&sup1;«Ë¾ **************************************************************************************************** * @attention * * ʵÑéÆ&frac12;̨:ÕýµãÔ­×Ó Ì&frac12;Ë÷Õß F407¿ª·¢°å * ÔÚÏßÊÓÆµ:www.yuanzige.com * &frac14;&frac14;ÊõÂÛ̳:www.openedv.com * &sup1;«Ë¾ÍøÖ·:www.alientek.com * &sup1;ºÂòµØÖ·:openedv.taobao.com * * ÐÞ¸Ä˵Ã÷ * V1.0 20211014 * µÚÒ»´Î·¢²&frac14; * V1.1 20230605 * ɾ³ýUSART_UX_IRQHandler()º¯ÊýµÄ³¬Ê±´¦ÀíºÍÐÞ¸ÄHAL_UART_RxCpltCallback() **************************************************************************************************** */ #include "./SYSTEM/sys/sys.h" #include "./SYSTEM/usart/usart.h" /* Èç&sup1;ûÊ&sup1;ÓÃos,Ôò°üÀ¨ÏÂÃæµÄÍ·ÎÄ&frac14;þ&frac14;´¿É */ #if SYS_SUPPORT_OS #include "os.h" /* os Ê&sup1;Óà */ #endif /******************************************************************************************/ /* &frac14;ÓÈëÒÔÏ´úÂë, Ö§³Öprintfº¯Êý, ¶ø²»ÐèҪѡÔñuse MicroLIB */ #if 1 #if (__ARMCC_VERSION >= 6010050) /* Ê&sup1;ÓÃAC6±àÒëÆ÷ʱ */ __asm(".global __use_no_semihosting\n\t"); /* ÉùÃ÷²»Ê&sup1;ÓðëÖ÷»úÄ£Ê&frac12; */ __asm(".global __ARM_use_no_argv \n\t"); /* AC6ÏÂÐèÒªÉùÃ÷mainº¯ÊýΪÎÞ²ÎÊý¸ñÊ&frac12;£¬·ñÔò²¿·ÖÀý³Ì¿ÉÄܳöÏÖ°ëÖ÷»úÄ£Ê&frac12; */ #else /* Ê&sup1;ÓÃAC5±àÒëÆ÷ʱ, ÒªÔÚÕâÀﶨÒå__FILE ºÍ ²»Ê&sup1;ÓðëÖ÷»úÄ£Ê&frac12; */ #pragma import(__use_no_semihosting) struct __FILE { int handle; /* Whatever you require here. If the only file you are using is */ /* standard output using printf() for debugging, no file handling */ /* is required. */ }; #endif /* ²»Ê&sup1;ÓðëÖ÷»úÄ£Ê&frac12;£¬ÖÁÉÙÐèÒªÖØ¶¨Òå_ttywrch\_sys_exit\_sys_command_stringº¯Êý,ÒÔͬʱ&frac14;æÈÝAC6ºÍAC5Ä£Ê&frac12; */ int _ttywrch(int ch) { ch = ch; return ch; } /* ¶¨Òå_sys_exit()ÒÔ±ÜÃâÊ&sup1;ÓðëÖ÷»úÄ£Ê&frac12; */ void _sys_exit(int x) { x = x; } char *_sys_command_string(char *cmd, int len) { return NULL; } /* FILE ÔÚ stdio.hÀïÃæ¶¨Òå. */ FILE __stdout; /* ÖØ¶¨Òåfputcº¯Êý, printfº¯Êý×îÖÕ»áͨ&sup1;ýµ÷ÓÃfputcÊä³ö×Ö·û´®µ&frac12;´®¿Ú */ int fputc(int ch, FILE *f) { while ((USART1->SR & 0X40) == 0); /* µÈ´ýÉÏÒ»¸ö×Ö·û·¢ËÍÍê³É */ USART1->DR = (uint8_t)ch; /* &frac12;«Òª·¢Ë͵Ä×Ö·û ch дÈëµ&frac12;DR&frac14;Ä´æÆ÷ */ return ch; } #endif /***********************************************END*******************************************/ #if USART_EN_RX /* Èç&sup1;ûÊ&sup1;ÄÜÁË&frac12;ÓÊÕ */ /* &frac12;ÓÊÕ»º³å, ×î´óUSART_REC_LEN¸ö×Ö&frac12;Ú. */ uint8_t g_usart_rx_buf[USART_REC_LEN]; /* &frac12;ÓÊÕ״̬ * bit15£¬ &frac12;ÓÊÕÍê³É±êÖ¾ * bit14£¬ &frac12;ÓÊÕµ&frac12;0x0d * bit13~0£¬ &frac12;ÓÊÕµ&frac12;µÄÓÐЧ×Ö&frac12;ÚÊýÄ¿ */ uint16_t g_usart_rx_sta = 0; uint8_t g_rx_buffer[RXBUFFERSIZE]; /* HAL¿âÊ&sup1;ÓõĴ®¿Ú&frac12;ÓÊÕ»º³å */ UART_HandleTypeDef g_uart1_handle; /* UART¾ä±ú */ /** * @brief ´®¿ÚX³õÊ&frac14;»¯º¯Êý * @param baudrate: ²¨ÌØÂÊ, ¸ù¾Ý×Ô&frac14;ºÐèÒªÉèÖò¨ÌØÂÊÖµ * @note ×¢Òâ: ±ØÐëÉèÖÃÕýÈ·µÄʱÖÓÔ´, ·ñÔò´®¿Ú²¨ÌØÂʾͻáÉèÖÃÒì³£. * ÕâÀïµÄUSARTµÄʱÖÓÔ´ÔÚsys_stm32_clock_init()º¯ÊýÖÐÒѾ­ÉèÖÃ&sup1;ýÁË. * @retval ÎÞ */ void usart_init(uint32_t baudrate) { g_uart1_handle.Instance = USART_UX; /* USART1 */ g_uart1_handle.Init.BaudRate = baudrate; /* ²¨ÌØÂÊ */ g_uart1_handle.Init.WordLength = UART_WORDLENGTH_8B; /* ×Ö³¤Îª8λÊý¾Ý¸ñÊ&frac12; */ g_uart1_handle.Init.StopBits = UART_STOPBITS_1; /* Ò»¸öÍ£Ö&sup1;λ */ g_uart1_handle.Init.Parity = UART_PARITY_NONE; /* ÎÞÆæÅ&frac14;УÑéλ */ g_uart1_handle.Init.HwFlowCtl = UART_HWCONTROL_NONE; /* ÎÞÓ²&frac14;þÁ÷¿Ø */ g_uart1_handle.Init.Mode = UART_MODE_TX_RX; /* ÊÕ·¢Ä£Ê&frac12; */ HAL_UART_Init(&g_uart1_handle); /* HAL_UART_Init()»áÊ&sup1;ÄÜUART1 */ /* ¸Ãº¯Êý»á¿ªÆô&frac12;ÓÊÕÖжϣº±ê־λUART_IT_RXNE£¬²¢ÇÒÉèÖÃ&frac12;ÓÊÕ»º³åÒÔ&frac14;°&frac12;ÓÊÕ»º³å&frac12;ÓÊÕ×î´óÊý¾ÝÁ¿ */ HAL_UART_Receive_IT(&g_uart1_handle, (uint8_t *)g_rx_buffer, RXBUFFERSIZE); } /** * @brief UARTµ×²ã³õÊ&frac14;»¯º¯Êý * @param huart: UART¾ä±úÀàÐÍÖ¸Õë * @note ´Ëº¯Êý»á±»HAL_UART_Init()µ÷Óà * Íê³ÉʱÖÓÊ&sup1;ÄÜ£¬Òý&frac12;ÅÅäÖã¬ÖжÏÅäÖà * @retval ÎÞ */ void HAL_UART_MspInit(UART_HandleTypeDef *huart) { GPIO_InitTypeDef gpio_init_struct; if(huart->Instance == USART_UX) /* Èç&sup1;ûÊÇ´®¿Ú1£¬&frac12;øÐд®¿Ú1 MSP³õÊ&frac14;»¯ */ { USART_UX_CLK_ENABLE(); /* USART1 ʱÖÓÊ&sup1;ÄÜ */ USART_TX_GPIO_CLK_ENABLE(); /* ·¢ËÍÒý&frac12;ÅʱÖÓÊ&sup1;ÄÜ */ USART_RX_GPIO_CLK_ENABLE(); /* &frac12;ÓÊÕÒý&frac12;ÅʱÖÓÊ&sup1;ÄÜ */ gpio_init_struct.Pin = USART_TX_GPIO_PIN; /* TXÒý&frac12;Å */ gpio_init_struct.Mode = GPIO_MODE_AF_PP; /* ¸´ÓÃÍÆÍìÊä³ö */ gpio_init_struct.Pull = GPIO_PULLUP; /* ÉÏÀ­ */ gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH; /* ¸ßËÙ */ gpio_init_struct.Alternate = USART_TX_GPIO_AF; /* ¸´ÓÃΪUSART1 */ HAL_GPIO_Init(USART_TX_GPIO_PORT, &gpio_init_struct); /* ³õÊ&frac14;»¯·¢ËÍÒý&frac12;Å */ gpio_init_struct.Pin = USART_RX_GPIO_PIN; /* RXÒý&frac12;Å */ gpio_init_struct.Alternate = USART_RX_GPIO_AF; /* ¸´ÓÃΪUSART1 */ HAL_GPIO_Init(USART_RX_GPIO_PORT, &gpio_init_struct); /* ³õÊ&frac14;»¯&frac12;ÓÊÕÒý&frac12;Å */ #if USART_EN_RX HAL_NVIC_EnableIRQ(USART_UX_IRQn); /* Ê&sup1;ÄÜUSART1ÖжÏͨµÀ */ HAL_NVIC_SetPriority(USART_UX_IRQn, 3, 3); /* ÇÀÕ&frac14;ÓÅÏÈ&frac14;¶3£¬×ÓÓÅÏÈ&frac14;¶3 */ #endif } } /** * @brief Rx´«Ê仨µ÷º¯Êý * @param huart: UART¾ä±úÀàÐÍÖ¸Õë * @retval ÎÞ */ void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if(huart->Instance == USART_UX) /* Èç&sup1;ûÊÇ´®¿Ú1 */ { if((g_usart_rx_sta & 0x8000) == 0) /* &frac12;ÓÊÕδÍê³É */ { if(g_usart_rx_sta & 0x4000) /* &frac12;ÓÊÕµ&frac12;ÁË0x0d */ { if(g_rx_buffer[0] != 0x0a) { g_usart_rx_sta = 0; /* &frac12;ÓÊÕ´íÎó,ÖØÐ¿ªÊ&frac14; */ } else { g_usart_rx_sta |= 0x8000; /* &frac12;ÓÊÕÍê³ÉÁË */ } } else /* »&sup1;ûÊÕµ&frac12;0X0D */ { if(g_rx_buffer[0] == 0x0d) { g_usart_rx_sta |= 0x4000; } else { g_usart_rx_buf[g_usart_rx_sta & 0X3FFF] = g_rx_buffer[0] ; g_usart_rx_sta++; if(g_usart_rx_sta > (USART_REC_LEN - 1)) { g_usart_rx_sta = 0; /* &frac12;ÓÊÕÊý¾Ý´íÎó,ÖØÐ¿ªÊ&frac14;&frac12;ÓÊÕ */ } } } } HAL_UART_Receive_IT(&g_uart1_handle, (uint8_t *)g_rx_buffer, RXBUFFERSIZE); } } /** * @brief ´®¿Ú1ÖжϷþÎñº¯Êý * @param ÎÞ * @retval ÎÞ */ void USART_UX_IRQHandler(void) { #if SYS_SUPPORT_OS /* Ê&sup1;ÓÃOS */ OSIntEnter(); #endif HAL_UART_IRQHandler(&g_uart1_handle); /* µ÷ÓÃHAL¿âÖжϴ¦Àí&sup1;«Óú¯Êý */ #if SYS_SUPPORT_OS /* Ê&sup1;ÓÃOS */ OSIntExit(); #endif } #endif /** **************************************************************************************************** * @file usart.c * @author ÕýµãÔ­×ÓÍŶÓ(ALIENTEK) * @version V1.1 * @date 2023-06-05 * @brief ´®¿Ú³õÊ&frac14;»¯´úÂë(Ò»°ãÊÇ´®¿Ú1)£¬Ö§³Öprintf * @license Copyright (c) 2020-2032, &sup1;ãÖÝÊÐÐÇÒíµç×Ó¿Æ&frac14;&frac14;ÓÐÏÞ&sup1;«Ë¾ **************************************************************************************************** * @attention * * ʵÑéÆ&frac12;̨:ÕýµãÔ­×Ó Ì&frac12;Ë÷Õß F407¿ª·¢°å * ÔÚÏßÊÓÆµ:www.yuanzige.com * &frac14;&frac14;ÊõÂÛ̳:www.openedv.com * &sup1;«Ë¾ÍøÖ·:www.alientek.com * &sup1;ºÂòµØÖ·:openedv.taobao.com * * ÐÞ¸Ä˵Ã÷ * V1.0 20211014 * µÚÒ»´Î·¢²&frac14; * V1.1 20230605 * ɾ³ýUSART_UX_IRQHandler()º¯ÊýµÄ³¬Ê±´¦ÀíºÍÐÞ¸ÄHAL_UART_RxCpltCallback() **************************************************************************************************** */ #include "./SYSTEM/sys/sys.h" #include "./SYSTEM/usart/usart.h" /* Èç&sup1;ûÊ&sup1;ÓÃos,Ôò°üÀ¨ÏÂÃæµÄÍ·ÎÄ&frac14;þ&frac14;´¿É */ #if SYS_SUPPORT_OS #include "os.h" /* os Ê&sup1;Óà */ #endif /******************************************************************************************/ /* &frac14;ÓÈëÒÔÏ´úÂë, Ö§³Öprintfº¯Êý, ¶ø²»ÐèҪѡÔñuse MicroLIB */ #if 1 #if (__ARMCC_VERSION >= 6010050) /* Ê&sup1;ÓÃAC6±àÒëÆ÷ʱ */ __asm(".global __use_no_semihosting\n\t"); /* ÉùÃ÷²»Ê&sup1;ÓðëÖ÷»úÄ£Ê&frac12; */ __asm(".global __ARM_use_no_argv \n\t"); /* AC6ÏÂÐèÒªÉùÃ÷mainº¯ÊýΪÎÞ²ÎÊý¸ñÊ&frac12;£¬·ñÔò²¿·ÖÀý³Ì¿ÉÄܳöÏÖ°ëÖ÷»úÄ£Ê&frac12; */ #else /* Ê&sup1;ÓÃAC5±àÒëÆ÷ʱ, ÒªÔÚÕâÀﶨÒå__FILE ºÍ ²»Ê&sup1;ÓðëÖ÷»úÄ£Ê&frac12; */ #pragma import(__use_no_semihosting) struct __FILE { int handle; /* Whatever you require here. If the only file you are using is */ /* standard output using printf() for debugging, no file handling */ /* is required. */ }; #endif /* ²»Ê&sup1;ÓðëÖ÷»úÄ£Ê&frac12;£¬ÖÁÉÙÐèÒªÖØ¶¨Òå_ttywrch\_sys_exit\_sys_command_stringº¯Êý,ÒÔͬʱ&frac14;æÈÝAC6ºÍAC5Ä£Ê&frac12; */ int _ttywrch(int ch) { ch = ch; return ch; } /* ¶¨Òå_sys_exit()ÒÔ±ÜÃâÊ&sup1;ÓðëÖ÷»úÄ£Ê&frac12; */ void _sys_exit(int x) { x = x; } char *_sys_command_string(char *cmd, int len) { return NULL; } /* FILE ÔÚ stdio.hÀïÃæ¶¨Òå. */ FILE __stdout; /* ÖØ¶¨Òåfputcº¯Êý, printfº¯Êý×îÖÕ»áͨ&sup1;ýµ÷ÓÃfputcÊä³ö×Ö·û´®µ&frac12;´®¿Ú */ int fputc(int ch, FILE *f) { while ((USART1->SR & 0X40) == 0); /* µÈ´ýÉÏÒ»¸ö×Ö·û·¢ËÍÍê³É */ USART1->DR = (uint8_t)ch; /* &frac12;«Òª·¢Ë͵Ä×Ö·û ch дÈëµ&frac12;DR&frac14;Ä´æÆ÷ */ return ch; } #endif /***********************************************END*******************************************/ #if USART_EN_RX /* Èç&sup1;ûÊ&sup1;ÄÜÁË&frac12;ÓÊÕ */ /* &frac12;ÓÊÕ»º³å, ×î´óUSART_REC_LEN¸ö×Ö&frac12;Ú. */ uint8_t g_usart_rx_buf[USART_REC_LEN]; /* &frac12;ÓÊÕ״̬ * bit15£¬ &frac12;ÓÊÕÍê³É±êÖ¾ * bit14£¬ &frac12;ÓÊÕµ&frac12;0x0d * bit13~0£¬ &frac12;ÓÊÕµ&frac12;µÄÓÐЧ×Ö&frac12;ÚÊýÄ¿ */ uint16_t g_usart_rx_sta = 0; uint8_t g_rx_buffer[RXBUFFERSIZE]; /* HAL¿âÊ&sup1;ÓõĴ®¿Ú&frac12;ÓÊÕ»º³å */ UART_HandleTypeDef g_uart1_handle; /* UART¾ä±ú */ /** * @brief ´®¿ÚX³õÊ&frac14;»¯º¯Êý * @param baudrate: ²¨ÌØÂÊ, ¸ù¾Ý×Ô&frac14;ºÐèÒªÉèÖò¨ÌØÂÊÖµ * @note ×¢Òâ: ±ØÐëÉèÖÃÕýÈ·µÄʱÖÓÔ´, ·ñÔò´®¿Ú²¨ÌØÂʾͻáÉèÖÃÒì³£. * ÕâÀïµÄUSARTµÄʱÖÓÔ´ÔÚsys_stm32_clock_init()º¯ÊýÖÐÒѾ­ÉèÖÃ&sup1;ýÁË. * @retval ÎÞ */ void usart_init(uint32_t baudrate) { g_uart1_handle.Instance = USART_UX; /* USART1 */ g_uart1_handle.Init.BaudRate = baudrate; /* ²¨ÌØÂÊ */ g_uart1_handle.Init.WordLength = UART_WORDLENGTH_8B; /* ×Ö³¤Îª8λÊý¾Ý¸ñÊ&frac12; */ g_uart1_handle.Init.StopBits = UART_STOPBITS_1; /* Ò»¸öÍ£Ö&sup1;λ */ g_uart1_handle.Init.Parity = UART_PARITY_NONE; /* ÎÞÆæÅ&frac14;УÑéλ */ g_uart1_handle.Init.HwFlowCtl = UART_HWCONTROL_NONE; /* ÎÞÓ²&frac14;þÁ÷¿Ø */ g_uart1_handle.Init.Mode = UART_MODE_TX_RX; /* ÊÕ·¢Ä£Ê&frac12; */ HAL_UART_Init(&g_uart1_handle); /* HAL_UART_Init()»áÊ&sup1;ÄÜUART1 */ /* ¸Ãº¯Êý»á¿ªÆô&frac12;ÓÊÕÖжϣº±ê־λUART_IT_RXNE£¬²¢ÇÒÉèÖÃ&frac12;ÓÊÕ»º³åÒÔ&frac14;°&frac12;ÓÊÕ»º³å&frac12;ÓÊÕ×î´óÊý¾ÝÁ¿ */ HAL_UART_Receive_IT(&g_uart1_handle, (uint8_t *)g_rx_buffer, RXBUFFERSIZE); } /** * @brief UARTµ×²ã³õÊ&frac14;»¯º¯Êý * @param huart: UART¾ä±úÀàÐÍÖ¸Õë * @note ´Ëº¯Êý»á±»HAL_UART_Init()µ÷Óà * Íê³ÉʱÖÓÊ&sup1;ÄÜ£¬Òý&frac12;ÅÅäÖã¬ÖжÏÅäÖà * @retval ÎÞ */ void HAL_UART_MspInit(UART_HandleTypeDef *huart) { GPIO_InitTypeDef gpio_init_struct; if(huart->Instance == USART_UX) /* Èç&sup1;ûÊÇ´®¿Ú1£¬&frac12;øÐд®¿Ú1 MSP³õÊ&frac14;»¯ */ { USART_UX_CLK_ENABLE(); /* USART1 ʱÖÓÊ&sup1;ÄÜ */ USART_TX_GPIO_CLK_ENABLE(); /* ·¢ËÍÒý&frac12;ÅʱÖÓÊ&sup1;ÄÜ */ USART_RX_GPIO_CLK_ENABLE(); /* &frac12;ÓÊÕÒý&frac12;ÅʱÖÓÊ&sup1;ÄÜ */ gpio_init_struct.Pin = USART_TX_GPIO_PIN; /* TXÒý&frac12;Å */ gpio_init_struct.Mode = GPIO_MODE_AF_PP; /* ¸´ÓÃÍÆÍìÊä³ö */ gpio_init_struct.Pull = GPIO_PULLUP; /* ÉÏÀ­ */ gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH; /* ¸ßËÙ */ gpio_init_struct.Alternate = USART_TX_GPIO_AF; /* ¸´ÓÃΪUSART1 */ HAL_GPIO_Init(USART_TX_GPIO_PORT, &gpio_init_struct); /* ³õÊ&frac14;»¯·¢ËÍÒý&frac12;Å */ gpio_init_struct.Pin = USART_RX_GPIO_PIN; /* RXÒý&frac12;Å */ gpio_init_struct.Alternate = USART_RX_GPIO_AF; /* ¸´ÓÃΪUSART1 */ HAL_GPIO_Init(USART_RX_GPIO_PORT, &gpio_init_struct); /* ³õÊ&frac14;»¯&frac12;ÓÊÕÒý&frac12;Å */ #if USART_EN_RX HAL_NVIC_EnableIRQ(USART_UX_IRQn); /* Ê&sup1;ÄÜUSART1ÖжÏͨµÀ */ HAL_NVIC_SetPriority(USART_UX_IRQn, 3, 3); /* ÇÀÕ&frac14;ÓÅÏÈ&frac14;¶3£¬×ÓÓÅÏÈ&frac14;¶3 */ #endif } } /** * @brief Rx´«Ê仨µ÷º¯Êý * @param huart: UART¾ä±úÀàÐÍÖ¸Õë * @retval ÎÞ */ void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if(huart->Instance == USART_UX) /* Èç&sup1;ûÊÇ´®¿Ú1 */ { if((g_usart_rx_sta & 0x8000) == 0) /* &frac12;ÓÊÕδÍê³É */ { if(g_usart_rx_sta & 0x4000) /* &frac12;ÓÊÕµ&frac12;ÁË0x0d */ { if(g_rx_buffer[0] != 0x0a) { g_usart_rx_sta = 0; /* &frac12;ÓÊÕ´íÎó,ÖØÐ¿ªÊ&frac14; */ } else { g_usart_rx_sta |= 0x8000; /* &frac12;ÓÊÕÍê³ÉÁË */ } } else /* »&sup1;ûÊÕµ&frac12;0X0D */ { if(g_rx_buffer[0] == 0x0d) { g_usart_rx_sta |= 0x4000; } else { g_usart_rx_buf[g_usart_rx_sta & 0X3FFF] = g_rx_buffer[0] ; g_usart_rx_sta++; if(g_usart_rx_sta > (USART_REC_LEN - 1)) { g_usart_rx_sta = 0; /* &frac12;ÓÊÕÊý¾Ý´íÎó,ÖØÐ¿ªÊ&frac14;&frac12;ÓÊÕ */ } } } } HAL_UART_Receive_IT(&g_uart1_handle, (uint8_t *)g_rx_buffer, RXBUFFERSIZE); } } /** * @brief ´®¿Ú1ÖжϷþÎñº¯Êý * @param ÎÞ * @retval ÎÞ */ void USART_UX_IRQHandler(void) { #if SYS_SUPPORT_OS /* Ê&sup1;ÓÃOS */ OSIntEnter(); #endif HAL_UART_IRQHandler(&g_uart1_handle); /* µ÷ÓÃHAL¿âÖжϴ¦Àí&sup1;«Óú¯Êý */ #if SYS_SUPPORT_OS /* Ê&sup1;ÓÃOS */ OSIntExit(); #endif } #endif /** **************************************************************************************************** * @file usart.c * @author ÕýµãÔ­×ÓÍŶÓ(ALIENTEK) * @version V1.1 * @date 2023-06-05 * @brief ´®¿Ú³õÊ&frac14;»¯´úÂë(Ò»°ãÊÇ´®¿Ú1)£¬Ö§³Öprintf * @license Copyright (c) 2020-2032, &sup1;ãÖÝÊÐÐÇÒíµç×Ó¿Æ&frac14;&frac14;ÓÐÏÞ&sup1;«Ë¾ **************************************************************************************************** * @attention * * ʵÑéÆ&frac12;̨:ÕýµãÔ­×Ó Ì&frac12;Ë÷Õß F407¿ª·¢°å * ÔÚÏßÊÓÆµ:www.yuanzige.com * &frac14;&frac14;ÊõÂÛ̳:www.openedv.com * &sup1;«Ë¾ÍøÖ·:www.alientek.com * &sup1;ºÂòµØÖ·:openedv.taobao.com * * ÐÞ¸Ä˵Ã÷ * V1.0 20211014 * µÚÒ»´Î·¢²&frac14; * V1.1 20230605 * ɾ³ýUSART_UX_IRQHandler()º¯ÊýµÄ³¬Ê±´¦ÀíºÍÐÞ¸ÄHAL_UART_RxCpltCallback() **************************************************************************************************** */ #include "./SYSTEM/sys/sys.h" #include "./SYSTEM/usart/usart.h" /* Èç&sup1;ûÊ&sup1;ÓÃos,Ôò°üÀ¨ÏÂÃæµÄÍ·ÎÄ&frac14;þ&frac14;´¿É */ #if SYS_SUPPORT_OS #include "os.h" /* os Ê&sup1;Óà */ #endif /******************************************************************************************/ /* &frac14;ÓÈëÒÔÏ´úÂë, Ö§³Öprintfº¯Êý, ¶ø²»ÐèҪѡÔñuse MicroLIB */ #if 1 #if (__ARMCC_VERSION >= 6010050) /* Ê&sup1;ÓÃAC6±àÒëÆ÷ʱ */ __asm(".global __use_no_semihosting\n\t"); /* ÉùÃ÷²»Ê&sup1;ÓðëÖ÷»úÄ£Ê&frac12; */ __asm(".global __ARM_use_no_argv \n\t"); /* AC6ÏÂÐèÒªÉùÃ÷mainº¯ÊýΪÎÞ²ÎÊý¸ñÊ&frac12;£¬·ñÔò²¿·ÖÀý³Ì¿ÉÄܳöÏÖ°ëÖ÷»úÄ£Ê&frac12; */ #else /* Ê&sup1;ÓÃAC5±àÒëÆ÷ʱ, ÒªÔÚÕâÀﶨÒå__FILE ºÍ ²»Ê&sup1;ÓðëÖ÷»úÄ£Ê&frac12; */ #pragma import(__use_no_semihosting) struct __FILE { int handle; /* Whatever you require here. If the only file you are using is */ /* standard output using printf() for debugging, no file handling */ /* is required. */ }; #endif /* ²»Ê&sup1;ÓðëÖ÷»úÄ£Ê&frac12;£¬ÖÁÉÙÐèÒªÖØ¶¨Òå_ttywrch\_sys_exit\_sys_command_stringº¯Êý,ÒÔͬʱ&frac14;æÈÝAC6ºÍAC5Ä£Ê&frac12; */ int _ttywrch(int ch) { ch = ch; return ch; } /* ¶¨Òå_sys_exit()ÒÔ±ÜÃâÊ&sup1;ÓðëÖ÷»úÄ£Ê&frac12; */ void _sys_exit(int x) { x = x; } char *_sys_command_string(char *cmd, int len) { return NULL; } /* FILE ÔÚ stdio.hÀïÃæ¶¨Òå. */ FILE __stdout; /* ÖØ¶¨Òåfputcº¯Êý, printfº¯Êý×îÖÕ»áͨ&sup1;ýµ÷ÓÃfputcÊä³ö×Ö·û´®µ&frac12;´®¿Ú */ int fputc(int ch, FILE *f) { while ((USART1->SR & 0X40) == 0); /* µÈ´ýÉÏÒ»¸ö×Ö·û·¢ËÍÍê³É */ USART1->DR = (uint8_t)ch; /* &frac12;«Òª·¢Ë͵Ä×Ö·û ch дÈëµ&frac12;DR&frac14;Ä´æÆ÷ */ return ch; } #endif /***********************************************END*******************************************/ #if USART_EN_RX /* Èç&sup1;ûÊ&sup1;ÄÜÁË&frac12;ÓÊÕ */ /* &frac12;ÓÊÕ»º³å, ×î´óUSART_REC_LEN¸ö×Ö&frac12;Ú. */ uint8_t g_usart_rx_buf[USART_REC_LEN]; /* &frac12;ÓÊÕ״̬ * bit15£¬ &frac12;ÓÊÕÍê³É±êÖ¾ * bit14£¬ &frac12;ÓÊÕµ&frac12;0x0d * bit13~0£¬ &frac12;ÓÊÕµ&frac12;µÄÓÐЧ×Ö&frac12;ÚÊýÄ¿ */ uint16_t g_usart_rx_sta = 0; uint8_t g_rx_buffer[RXBUFFERSIZE]; /* HAL¿âÊ&sup1;ÓõĴ®¿Ú&frac12;ÓÊÕ»º³å */ UART_HandleTypeDef g_uart1_handle; /* UART¾ä±ú */ /** * @brief ´®¿ÚX³õÊ&frac14;»¯º¯Êý * @param baudrate: ²¨ÌØÂÊ, ¸ù¾Ý×Ô&frac14;ºÐèÒªÉèÖò¨ÌØÂÊÖµ * @note ×¢Òâ: ±ØÐëÉèÖÃÕýÈ·µÄʱÖÓÔ´, ·ñÔò´®¿Ú²¨ÌØÂʾͻáÉèÖÃÒì³£. * ÕâÀïµÄUSARTµÄʱÖÓÔ´ÔÚsys_stm32_clock_init()º¯ÊýÖÐÒѾ­ÉèÖÃ&sup1;ýÁË. * @retval ÎÞ */ void usart_init(uint32_t baudrate) { g_uart1_handle.Instance = USART_UX; /* USART1 */ g_uart1_handle.Init.BaudRate = baudrate; /* ²¨ÌØÂÊ */ g_uart1_handle.Init.WordLength = UART_WORDLENGTH_8B; /* ×Ö³¤Îª8λÊý¾Ý¸ñÊ&frac12; */ g_uart1_handle.Init.StopBits = UART_STOPBITS_1; /* Ò»¸öÍ£Ö&sup1;λ */ g_uart1_handle.Init.Parity = UART_PARITY_NONE; /* ÎÞÆæÅ&frac14;УÑéλ */ g_uart1_handle.Init.HwFlowCtl = UART_HWCONTROL_NONE; /* ÎÞÓ²&frac14;þÁ÷¿Ø */ g_uart1_handle.Init.Mode = UART_MODE_TX_RX; /* ÊÕ·¢Ä£Ê&frac12; */ HAL_UART_Init(&g_uart1_handle); /* HAL_UART_Init()»áÊ&sup1;ÄÜUART1 */ /* ¸Ãº¯Êý»á¿ªÆô&frac12;ÓÊÕÖжϣº±ê־λUART_IT_RXNE£¬²¢ÇÒÉèÖÃ&frac12;ÓÊÕ»º³åÒÔ&frac14;°&frac12;ÓÊÕ»º³å&frac12;ÓÊÕ×î´óÊý¾ÝÁ¿ */ HAL_UART_Receive_IT(&g_uart1_handle, (uint8_t *)g_rx_buffer, RXBUFFERSIZE); } /** * @brief UARTµ×²ã³õÊ&frac14;»¯º¯Êý * @param huart: UART¾ä±úÀàÐÍÖ¸Õë * @note ´Ëº¯Êý»á±»HAL_UART_Init()µ÷Óà * Íê³ÉʱÖÓÊ&sup1;ÄÜ£¬Òý&frac12;ÅÅäÖã¬ÖжÏÅäÖà * @retval ÎÞ */ void HAL_UART_MspInit(UART_HandleTypeDef *huart) { GPIO_InitTypeDef gpio_init_struct; if(huart->Instance == USART_UX) /* Èç&sup1;ûÊÇ´®¿Ú1£¬&frac12;øÐд®¿Ú1 MSP³õÊ&frac14;»¯ */ { USART_UX_CLK_ENABLE(); /* USART1 ʱÖÓÊ&sup1;ÄÜ */ USART_TX_GPIO_CLK_ENABLE(); /* ·¢ËÍÒý&frac12;ÅʱÖÓÊ&sup1;ÄÜ */ USART_RX_GPIO_CLK_ENABLE(); /* &frac12;ÓÊÕÒý&frac12;ÅʱÖÓÊ&sup1;ÄÜ */ gpio_init_struct.Pin = USART_TX_GPIO_PIN; /* TXÒý&frac12;Å */ gpio_init_struct.Mode = GPIO_MODE_AF_PP; /* ¸´ÓÃÍÆÍìÊä³ö */ gpio_init_struct.Pull = GPIO_PULLUP; /* ÉÏÀ­ */ gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH; /* ¸ßËÙ */ gpio_init_struct.Alternate = USART_TX_GPIO_AF; /* ¸´ÓÃΪUSART1 */ HAL_GPIO_Init(USART_TX_GPIO_PORT, &gpio_init_struct); /* ³õÊ&frac14;»¯·¢ËÍÒý&frac12;Å */ gpio_init_struct.Pin = USART_RX_GPIO_PIN; /* RXÒý&frac12;Å */ gpio_init_struct.Alternate = USART_RX_GPIO_AF; /* ¸´ÓÃΪUSART1 */ HAL_GPIO_Init(USART_RX_GPIO_PORT, &gpio_init_struct); /* ³õÊ&frac14;»¯&frac12;ÓÊÕÒý&frac12;Å */ #if USART_EN_RX HAL_NVIC_EnableIRQ(USART_UX_IRQn); /* Ê&sup1;ÄÜUSART1ÖжÏͨµÀ */ HAL_NVIC_SetPriority(USART_UX_IRQn, 3, 3); /* ÇÀÕ&frac14;ÓÅÏÈ&frac14;¶3£¬×ÓÓÅÏÈ&frac14;¶3 */ #endif } } /** * @brief Rx´«Ê仨µ÷º¯Êý * @param huart: UART¾ä±úÀàÐÍÖ¸Õë * @retval ÎÞ */ void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if(huart->Instance == USART_UX) /* Èç&sup1;ûÊÇ´®¿Ú1 */ { if((g_usart_rx_sta & 0x8000) == 0) /* &frac12;ÓÊÕδÍê³É */ { if(g_usart_rx_sta & 0x4000) /* &frac12;ÓÊÕµ&frac12;ÁË0x0d */ { if(g_rx_buffer[0] != 0x0a) { g_usart_rx_sta = 0; /* &frac12;ÓÊÕ´íÎó,ÖØÐ¿ªÊ&frac14; */ } else { g_usart_rx_sta |= 0x8000; /* &frac12;ÓÊÕÍê³ÉÁË */ } } else /* »&sup1;ûÊÕµ&frac12;0X0D */ { if(g_rx_buffer[0] == 0x0d) { g_usart_rx_sta |= 0x4000; } else { g_usart_rx_buf[g_usart_rx_sta & 0X3FFF] = g_rx_buffer[0] ; g_usart_rx_sta++; if(g_usart_rx_sta > (USART_REC_LEN - 1)) { g_usart_rx_sta = 0; /* &frac12;ÓÊÕÊý¾Ý´íÎó,ÖØÐ¿ªÊ&frac14;&frac12;ÓÊÕ */ } } } } HAL_UART_Receive_IT(&g_uart1_handle, (uint8_t *)g_rx_buffer, RXBUFFERSIZE); } } /** * @brief ´®¿Ú1ÖжϷþÎñº¯Êý * @param ÎÞ * @retval ÎÞ */ void USART_UX_IRQHandler(void) { #if SYS_SUPPORT_OS /* Ê&sup1;ÓÃOS */ OSIntEnter(); #endif HAL_UART_IRQHandler(&g_uart1_handle); /* µ÷ÓÃHAL¿âÖжϴ¦Àí&sup1;«Óú¯Êý */ #if SYS_SUPPORT_OS /* Ê&sup1;ÓÃOS */ OSIntExit(); #endif } #endif /** **************************************************************************************************** * @file usart.c * @author ÕýµãÔ­×ÓÍŶÓ(ALIENTEK) * @version V1.1 * @date 2023-06-05 * @brief ´®¿Ú³õÊ&frac14;»¯´úÂë(Ò»°ãÊÇ´®¿Ú1)£¬Ö§³Öprintf * @license Copyright (c) 2020-2032, &sup1;ãÖÝÊÐÐÇÒíµç×Ó¿Æ&frac14;&frac14;ÓÐÏÞ&sup1;«Ë¾ **************************************************************************************************** * @attention * * ʵÑéÆ&frac12;̨:ÕýµãÔ­×Ó Ì&frac12;Ë÷Õß F407¿ª·¢°å * ÔÚÏßÊÓÆµ:www.yuanzige.com * &frac14;&frac14;ÊõÂÛ̳:www.openedv.com * &sup1;«Ë¾ÍøÖ·:www.alientek.com * &sup1;ºÂòµØÖ·:openedv.taobao.com * * ÐÞ¸Ä˵Ã÷ * V1.0 20211014 * µÚÒ»´Î·¢²&frac14; * V1.1 20230605 * ɾ³ýUSART_UX_IRQHandler()º¯ÊýµÄ³¬Ê±´¦ÀíºÍÐÞ¸ÄHAL_UART_RxCpltCallback() **************************************************************************************************** */ #include "./SYSTEM/sys/sys.h" #include "./SYSTEM/usart/usart.h" /* Èç&sup1;ûÊ&sup1;ÓÃos,Ôò°üÀ¨ÏÂÃæµÄÍ·ÎÄ&frac14;þ&frac14;´¿É */ #if SYS_SUPPORT_OS #include "os.h" /* os Ê&sup1;Óà */ #endif /******************************************************************************************/ /* &frac14;ÓÈëÒÔÏ´úÂë, Ö§³Öprintfº¯Êý, ¶ø²»ÐèҪѡÔñuse MicroLIB */ #if 1 #if (__ARMCC_VERSION >= 6010050) /* Ê&sup1;ÓÃAC6±àÒëÆ÷ʱ */ __asm(".global __use_no_semihosting\n\t"); /* ÉùÃ÷²»Ê&sup1;ÓðëÖ÷»úÄ£Ê&frac12; */ __asm(".global __ARM_use_no_argv \n\t"); /* AC6ÏÂÐèÒªÉùÃ÷mainº¯ÊýΪÎÞ²ÎÊý¸ñÊ&frac12;£¬·ñÔò²¿·ÖÀý³Ì¿ÉÄܳöÏÖ°ëÖ÷»úÄ£Ê&frac12; */ #else /* Ê&sup1;ÓÃAC5±àÒëÆ÷ʱ, ÒªÔÚÕâÀﶨÒå__FILE ºÍ ²»Ê&sup1;ÓðëÖ÷»úÄ£Ê&frac12; */ #pragma import(__use_no_semihosting) struct __FILE { int handle; /* Whatever you require here. If the only file you are using is */ /* standard output using printf() for debugging, no file handling */ /* is required. */ }; #endif /* ²»Ê&sup1;ÓðëÖ÷»úÄ£Ê&frac12;£¬ÖÁÉÙÐèÒªÖØ¶¨Òå_ttywrch\_sys_exit\_sys_command_stringº¯Êý,ÒÔͬʱ&frac14;æÈÝAC6ºÍAC5Ä£Ê&frac12; */ int _ttywrch(int ch) { ch = ch; return ch; } /* ¶¨Òå_sys_exit()ÒÔ±ÜÃâÊ&sup1;ÓðëÖ÷»úÄ£Ê&frac12; */ void _sys_exit(int x) { x = x; } char *_sys_command_string(char *cmd, int len) { return NULL; } /* FILE ÔÚ stdio.hÀïÃæ¶¨Òå. */ FILE __stdout; /* ÖØ¶¨Òåfputcº¯Êý, printfº¯Êý×îÖÕ»áͨ&sup1;ýµ÷ÓÃfputcÊä³ö×Ö·û´®µ&frac12;´®¿Ú */ int fputc(int ch, FILE *f) { while ((USART1->SR & 0X40) == 0); /* µÈ´ýÉÏÒ»¸ö×Ö·û·¢ËÍÍê³É */ USART1->DR = (uint8_t)ch; /* &frac12;«Òª·¢Ë͵Ä×Ö·û ch дÈëµ&frac12;DR&frac14;Ä´æÆ÷ */ return ch; } #endif /***********************************************END*******************************************/ #if USART_EN_RX /* Èç&sup1;ûÊ&sup1;ÄÜÁË&frac12;ÓÊÕ */ /* &frac12;ÓÊÕ»º³å, ×î´óUSART_REC_LEN¸ö×Ö&frac12;Ú. */ uint8_t g_usart_rx_buf[USART_REC_LEN]; /* &frac12;ÓÊÕ״̬ * bit15£¬ &frac12;ÓÊÕÍê³É±êÖ¾ * bit14£¬ &frac12;ÓÊÕµ&frac12;0x0d * bit13~0£¬ &frac12;ÓÊÕµ&frac12;µÄÓÐЧ×Ö&frac12;ÚÊýÄ¿ */ uint16_t g_usart_rx_sta = 0; uint8_t g_rx_buffer[RXBUFFERSIZE]; /* HAL¿âÊ&sup1;ÓõĴ®¿Ú&frac12;ÓÊÕ»º³å */ UART_HandleTypeDef g_uart1_handle; /* UART¾ä±ú */ /** * @brief ´®¿ÚX³õÊ&frac14;»¯º¯Êý * @param baudrate: ²¨ÌØÂÊ, ¸ù¾Ý×Ô&frac14;ºÐèÒªÉèÖò¨ÌØÂÊÖµ * @note ×¢Òâ: ±ØÐëÉèÖÃÕýÈ·µÄʱÖÓÔ´, ·ñÔò´®¿Ú²¨ÌØÂʾͻáÉèÖÃÒì³£. * ÕâÀïµÄUSARTµÄʱÖÓÔ´ÔÚsys_stm32_clock_init()º¯ÊýÖÐÒѾ­ÉèÖÃ&sup1;ýÁË. * @retval ÎÞ */ void usart_init(uint32_t baudrate) { g_uart1_handle.Instance = USART_UX; /* USART1 */ g_uart1_handle.Init.BaudRate = baudrate; /* ²¨ÌØÂÊ */ g_uart1_handle.Init.WordLength = UART_WORDLENGTH_8B; /* ×Ö³¤Îª8λÊý¾Ý¸ñÊ&frac12; */ g_uart1_handle.Init.StopBits = UART_STOPBITS_1; /* Ò»¸öÍ£Ö&sup1;λ */ g_uart1_handle.Init.Parity = UART_PARITY_NONE; /* ÎÞÆæÅ&frac14;УÑéλ */ g_uart1_handle.Init.HwFlowCtl = UART_HWCONTROL_NONE; /* ÎÞÓ²&frac14;þÁ÷¿Ø */ g_uart1_handle.Init.Mode = UART_MODE_TX_RX; /* ÊÕ·¢Ä£Ê&frac12; */ HAL_UART_Init(&g_uart1_handle); /* HAL_UART_Init()»áÊ&sup1;ÄÜUART1 */ /* ¸Ãº¯Êý»á¿ªÆô&frac12;ÓÊÕÖжϣº±ê־λUART_IT_RXNE£¬²¢ÇÒÉèÖÃ&frac12;ÓÊÕ»º³åÒÔ&frac14;°&frac12;ÓÊÕ»º³å&frac12;ÓÊÕ×î´óÊý¾ÝÁ¿ */ HAL_UART_Receive_IT(&g_uart1_handle, (uint8_t *)g_rx_buffer, RXBUFFERSIZE); } /** * @brief UARTµ×²ã³õÊ&frac14;»¯º¯Êý * @param huart: UART¾ä±úÀàÐÍÖ¸Õë * @note ´Ëº¯Êý»á±»HAL_UART_Init()µ÷Óà * Íê³ÉʱÖÓÊ&sup1;ÄÜ£¬Òý&frac12;ÅÅäÖã¬ÖжÏÅäÖà * @retval ÎÞ */ void HAL_UART_MspInit(UART_HandleTypeDef *huart) { GPIO_InitTypeDef gpio_init_struct; if(huart->Instance == USART_UX) /* Èç&sup1;ûÊÇ´®¿Ú1£¬&frac12;øÐд®¿Ú1 MSP³õÊ&frac14;»¯ */ { USART_UX_CLK_ENABLE(); /* USART1 ʱÖÓÊ&sup1;ÄÜ */ USART_TX_GPIO_CLK_ENABLE(); /* ·¢ËÍÒý&frac12;ÅʱÖÓÊ&sup1;ÄÜ */ USART_RX_GPIO_CLK_ENABLE(); /* &frac12;ÓÊÕÒý&frac12;ÅʱÖÓÊ&sup1;ÄÜ */ gpio_init_struct.Pin = USART_TX_GPIO_PIN; /* TXÒý&frac12;Å */ gpio_init_struct.Mode = GPIO_MODE_AF_PP; /* ¸´ÓÃÍÆÍìÊä³ö */ gpio_init_struct.Pull = GPIO_PULLUP; /* ÉÏÀ­ */ gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH; /* ¸ßËÙ */ gpio_init_struct.Alternate = USART_TX_GPIO_AF; /* ¸´ÓÃΪUSART1 */ HAL_GPIO_Init(USART_TX_GPIO_PORT, &gpio_init_struct); /* ³õÊ&frac14;»¯·¢ËÍÒý&frac12;Å */ gpio_init_struct.Pin = USART_RX_GPIO_PIN; /* RXÒý&frac12;Å */ gpio_init_struct.Alternate = USART_RX_GPIO_AF; /* ¸´ÓÃΪUSART1 */ HAL_GPIO_Init(USART_RX_GPIO_PORT, &gpio_init_struct); /* ³õÊ&frac14;»¯&frac12;ÓÊÕÒý&frac12;Å */ #if USART_EN_RX HAL_NVIC_EnableIRQ(USART_UX_IRQn); /* Ê&sup1;ÄÜUSART1ÖжÏͨµÀ */ HAL_NVIC_SetPriority(USART_UX_IRQn, 3, 3); /* ÇÀÕ&frac14;ÓÅÏÈ&frac14;¶3£¬×ÓÓÅÏÈ&frac14;¶3 */ #endif } } /** * @brief Rx´«Ê仨µ÷º¯Êý * @param huart: UART¾ä±úÀàÐÍÖ¸Õë * @retval ÎÞ */ void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if(huart->Instance == USART_UX) /* Èç&sup1;ûÊÇ´®¿Ú1 */ { if((g_usart_rx_sta & 0x8000) == 0) /* &frac12;ÓÊÕδÍê³É */ { if(g_usart_rx_sta & 0x4000) /* &frac12;ÓÊÕµ&frac12;ÁË0x0d */ { if(g_rx_buffer[0] != 0x0a) { g_usart_rx_sta = 0; /* &frac12;ÓÊÕ´íÎó,ÖØÐ¿ªÊ&frac14; */ } else { g_usart_rx_sta |= 0x8000; /* &frac12;ÓÊÕÍê³ÉÁË */ } } else /* »&sup1;ûÊÕµ&frac12;0X0D */ { if(g_rx_buffer[0] == 0x0d) { g_usart_rx_sta |= 0x4000; } else { g_usart_rx_buf[g_usart_rx_sta & 0X3FFF] = g_rx_buffer[0] ; g_usart_rx_sta++; if(g_usart_rx_sta > (USART_REC_LEN - 1)) { g_usart_rx_sta = 0; /* &frac12;ÓÊÕÊý¾Ý´íÎó,ÖØÐ¿ªÊ&frac14;&frac12;ÓÊÕ */ } } } } HAL_UART_Receive_IT(&g_uart1_handle, (uint8_t *)g_rx_buffer, RXBUFFERSIZE); } } /** * @brief ´®¿Ú1ÖжϷþÎñº¯Êý * @param ÎÞ * @retval ÎÞ */ void USART_UX_IRQHandler(void) { #if SYS_SUPPORT_OS /* Ê&sup1;ÓÃOS */ OSIntEnter(); #endif HAL_UART_IRQHandler(&g_uart1_handle); /* µ÷ÓÃHAL¿âÖжϴ¦Àí&sup1;«Óú¯Êý */ #if SYS_SUPPORT_OS /* Ê&sup1;ÓÃOS */ OSIntExit(); #endif } #endif /** **************************************************************************************************** * @file usart.c * @author ÕýµãÔ­×ÓÍŶÓ(ALIENTEK) * @version V1.1 * @date 2023-06-05 * @brief ´®¿Ú³õÊ&frac14;»¯´úÂë(Ò»°ãÊÇ´®¿Ú1)£¬Ö§³Öprintf * @license Copyright (c) 2020-2032, &sup1;ãÖÝÊÐÐÇÒíµç×Ó¿Æ&frac14;&frac14;ÓÐÏÞ&sup1;«Ë¾ **************************************************************************************************** * @attention * * ʵÑéÆ&frac12;̨:ÕýµãÔ­×Ó Ì&frac12;Ë÷Õß F407¿ª·¢°å * ÔÚÏßÊÓÆµ:www.yuanzige.com * &frac14;&frac14;ÊõÂÛ̳:www.openedv.com * &sup1;«Ë¾ÍøÖ·:www.alientek.com * &sup1;ºÂòµØÖ·:openedv.taobao.com * * ÐÞ¸Ä˵Ã÷ * V1.0 20211014 * µÚÒ»´Î·¢²&frac14; * V1.1 20230605 * ɾ³ýUSART_UX_IRQHandler()º¯ÊýµÄ³¬Ê±´¦ÀíºÍÐÞ¸ÄHAL_UART_RxCpltCallback() **************************************************************************************************** */ #include "./SYSTEM/sys/sys.h" #include "./SYSTEM/usart/usart.h" /* Èç&sup1;ûÊ&sup1;ÓÃos,Ôò°üÀ¨ÏÂÃæµÄÍ·ÎÄ&frac14;þ&frac14;´¿É */ #if SYS_SUPPORT_OS #include "os.h" /* os Ê&sup1;Óà */ #endif /******************************************************************************************/ /* &frac14;ÓÈëÒÔÏ´úÂë, Ö§³Öprintfº¯Êý, ¶ø²»ÐèҪѡÔñuse MicroLIB */ #if 1 #if (__ARMCC_VERSION >= 6010050) /* Ê&sup1;ÓÃAC6±àÒëÆ÷ʱ */ __asm(".global __use_no_semihosting\n\t"); /* ÉùÃ÷²»Ê&sup1;ÓðëÖ÷»úÄ£Ê&frac12; */ __asm(".global __ARM_use_no_argv \n\t"); /* AC6ÏÂÐèÒªÉùÃ÷mainº¯ÊýΪÎÞ²ÎÊý¸ñÊ&frac12;£¬·ñÔò²¿·ÖÀý³Ì¿ÉÄܳöÏÖ°ëÖ÷»úÄ£Ê&frac12; */ #else /* Ê&sup1;ÓÃAC5±àÒëÆ÷ʱ, ÒªÔÚÕâÀﶨÒå__FILE ºÍ ²»Ê&sup1;ÓðëÖ÷»úÄ£Ê&frac12; */ #pragma import(__use_no_semihosting) struct __FILE { int handle; /* Whatever you require here. If the only file you are using is */ /* standard output using printf() for debugging, no file handling */ /* is required. */ }; #endif /* ²»Ê&sup1;ÓðëÖ÷»úÄ£Ê&frac12;£¬ÖÁÉÙÐèÒªÖØ¶¨Òå_ttywrch\_sys_exit\_sys_command_stringº¯Êý,ÒÔͬʱ&frac14;æÈÝAC6ºÍAC5Ä£Ê&frac12; */ int _ttywrch(int ch) { ch = ch; return ch; } /* ¶¨Òå_sys_exit()ÒÔ±ÜÃâÊ&sup1;ÓðëÖ÷»úÄ£Ê&frac12; */ void _sys_exit(int x) { x = x; } char *_sys_command_string(char *cmd, int len) { return NULL; } /* FILE ÔÚ stdio.hÀïÃæ¶¨Òå. */ FILE __stdout; /* ÖØ¶¨Òåfputcº¯Êý, printfº¯Êý×îÖÕ»áͨ&sup1;ýµ÷ÓÃfputcÊä³ö×Ö·û´®µ&frac12;´®¿Ú */ int fputc(int ch, FILE *f) { while ((USART1->SR & 0X40) == 0); /* µÈ´ýÉÏÒ»¸ö×Ö·û·¢ËÍÍê³É */ USART1->DR = (uint8_t)ch; /* &frac12;«Òª·¢Ë͵Ä×Ö·û ch дÈëµ&frac12;DR&frac14;Ä´æÆ÷ */ return ch; } #endif /***********************************************END*******************************************/ #if USART_EN_RX /* Èç&sup1;ûÊ&sup1;ÄÜÁË&frac12;ÓÊÕ */ /* &frac12;ÓÊÕ»º³å, ×î´óUSART_REC_LEN¸ö×Ö&frac12;Ú. */ uint8_t g_usart_rx_buf[USART_REC_LEN]; /* &frac12;ÓÊÕ״̬ * bit15£¬ &frac12;ÓÊÕÍê³É±êÖ¾ * bit14£¬ &frac12;ÓÊÕµ&frac12;0x0d * bit13~0£¬ &frac12;ÓÊÕµ&frac12;µÄÓÐЧ×Ö&frac12;ÚÊýÄ¿ */ uint16_t g_usart_rx_sta = 0; uint8_t g_rx_buffer[RXBUFFERSIZE]; /* HAL¿âÊ&sup1;ÓõĴ®¿Ú&frac12;ÓÊÕ»º³å */ UART_HandleTypeDef g_uart1_handle; /* UART¾ä±ú */ /** * @brief ´®¿ÚX³õÊ&frac14;»¯º¯Êý * @param baudrate: ²¨ÌØÂÊ, ¸ù¾Ý×Ô&frac14;ºÐèÒªÉèÖò¨ÌØÂÊÖµ * @note ×¢Òâ: ±ØÐëÉèÖÃÕýÈ·µÄʱÖÓÔ´, ·ñÔò´®¿Ú²¨ÌØÂʾͻáÉèÖÃÒì³£. * ÕâÀïµÄUSARTµÄʱÖÓÔ´ÔÚsys_stm32_clock_init()º¯ÊýÖÐÒѾ­ÉèÖÃ&sup1;ýÁË. * @retval ÎÞ */ void usart_init(uint32_t baudrate) { g_uart1_handle.Instance = USART_UX; /* USART1 */ g_uart1_handle.Init.BaudRate = baudrate; /* ²¨ÌØÂÊ */ g_uart1_handle.Init.WordLength = UART_WORDLENGTH_8B; /* ×Ö³¤Îª8λÊý¾Ý¸ñÊ&frac12; */ g_uart1_handle.Init.StopBits = UART_STOPBITS_1; /* Ò»¸öÍ£Ö&sup1;λ */ g_uart1_handle.Init.Parity = UART_PARITY_NONE; /* ÎÞÆæÅ&frac14;УÑéλ */ g_uart1_handle.Init.HwFlowCtl = UART_HWCONTROL_NONE; /* ÎÞÓ²&frac14;þÁ÷¿Ø */ g_uart1_handle.Init.Mode = UART_MODE_TX_RX; /* ÊÕ·¢Ä£Ê&frac12; */ HAL_UART_Init(&g_uart1_handle); /* HAL_UART_Init()»áÊ&sup1;ÄÜUART1 */ /* ¸Ãº¯Êý»á¿ªÆô&frac12;ÓÊÕÖжϣº±ê־λUART_IT_RXNE£¬²¢ÇÒÉèÖÃ&frac12;ÓÊÕ»º³åÒÔ&frac14;°&frac12;ÓÊÕ»º³å&frac12;ÓÊÕ×î´óÊý¾ÝÁ¿ */ HAL_UART_Receive_IT(&g_uart1_handle, (uint8_t *)g_rx_buffer, RXBUFFERSIZE); } /** * @brief UARTµ×²ã³õÊ&frac14;»¯º¯Êý * @param huart: UART¾ä±úÀàÐÍÖ¸Õë * @note ´Ëº¯Êý»á±»HAL_UART_Init()µ÷Óà * Íê³ÉʱÖÓÊ&sup1;ÄÜ£¬Òý&frac12;ÅÅäÖã¬ÖжÏÅäÖà * @retval ÎÞ */ void HAL_UART_MspInit(UART_HandleTypeDef *huart) { GPIO_InitTypeDef gpio_init_struct; if(huart->Instance == USART_UX) /* Èç&sup1;ûÊÇ´®¿Ú1£¬&frac12;øÐд®¿Ú1 MSP³õÊ&frac14;»¯ */ { USART_UX_CLK_ENABLE(); /* USART1 ʱÖÓÊ&sup1;ÄÜ */ USART_TX_GPIO_CLK_ENABLE(); /* ·¢ËÍÒý&frac12;ÅʱÖÓÊ&sup1;ÄÜ */ USART_RX_GPIO_CLK_ENABLE(); /* &frac12;ÓÊÕÒý&frac12;ÅʱÖÓÊ&sup1;ÄÜ */ gpio_init_struct.Pin = USART_TX_GPIO_PIN; /* TXÒý&frac12;Å */ gpio_init_struct.Mode = GPIO_MODE_AF_PP; /* ¸´ÓÃÍÆÍìÊä³ö */ gpio_init_struct.Pull = GPIO_PULLUP; /* ÉÏÀ­ */ gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH; /* ¸ßËÙ */ gpio_init_struct.Alternate = USART_TX_GPIO_AF; /* ¸´ÓÃΪUSART1 */ HAL_GPIO_Init(USART_TX_GPIO_PORT, &gpio_init_struct); /* ³õÊ&frac14;»¯·¢ËÍÒý&frac12;Å */ gpio_init_struct.Pin = USART_RX_GPIO_PIN; /* RXÒý&frac12;Å */ gpio_init_struct.Alternate = USART_RX_GPIO_AF; /* ¸´ÓÃΪUSART1 */ HAL_GPIO_Init(USART_RX_GPIO_PORT, &gpio_init_struct); /* ³õÊ&frac14;»¯&frac12;ÓÊÕÒý&frac12;Å */ #if USART_EN_RX HAL_NVIC_EnableIRQ(USART_UX_IRQn); /* Ê&sup1;ÄÜUSART1ÖжÏͨµÀ */ HAL_NVIC_SetPriority(USART_UX_IRQn, 3, 3); /* ÇÀÕ&frac14;ÓÅÏÈ&frac14;¶3£¬×ÓÓÅÏÈ&frac14;¶3 */ #endif } } /** * @brief Rx´«Ê仨µ÷º¯Êý * @param huart: UART¾ä±úÀàÐÍÖ¸Õë * @retval ÎÞ */ void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if(huart->Instance == USART_UX) /* Èç&sup1;ûÊÇ´®¿Ú1 */ { if((g_usart_rx_sta & 0x8000) == 0) /* &frac12;ÓÊÕδÍê³É */ { if(g_usart_rx_sta & 0x4000) /* &frac12;ÓÊÕµ&frac12;ÁË0x0d */ { if(g_rx_buffer[0] != 0x0a) { g_usart_rx_sta = 0; /* &frac12;ÓÊÕ´íÎó,ÖØÐ¿ªÊ&frac14; */ } else { g_usart_rx_sta |= 0x8000; /* &frac12;ÓÊÕÍê³ÉÁË */ } } else /* »&sup1;ûÊÕµ&frac12;0X0D */ { if(g_rx_buffer[0] == 0x0d) { g_usart_rx_sta |= 0x4000; } else { g_usart_rx_buf[g_usart_rx_sta & 0X3FFF] = g_rx_buffer[0] ; g_usart_rx_sta++; if(g_usart_rx_sta > (USART_REC_LEN - 1)) { g_usart_rx_sta = 0; /* &frac12;ÓÊÕÊý¾Ý´íÎó,ÖØÐ¿ªÊ&frac14;&frac12;ÓÊÕ */ } } } } HAL_UART_Receive_IT(&g_uart1_handle, (uint8_t *)g_rx_buffer, RXBUFFERSIZE); } } /** * @brief ´®¿Ú1ÖжϷþÎñº¯Êý * @param ÎÞ * @retval ÎÞ */ void USART_UX_IRQHandler(void) { #if SYS_SUPPORT_OS /* Ê&sup1;ÓÃOS */ OSIntEnter(); #endif HAL_UART_IRQHandler(&g_uart1_handle); /* µ÷ÓÃHAL¿âÖжϴ¦Àí&sup1;«Óú¯Êý */ #if SYS_SUPPORT_OS /* Ê&sup1;ÓÃOS */ OSIntExit(); #endif } #endif (我要使输入的在LCD上面显示应该怎么做)
05-21
#include "delay.h" static uint32_t fam_nus = 0; static uint32_t fam_nms = 0; /* &sup1;¦ ÄÜ£º ÑÓʱ³õÊ&frac14;»¯ ²Î Êý£º ÎÞ ·µ»ØÖµ£º ÎÞ */ void Delay_Init(void) { //&sup1;رÕ&frac14;ÆÊ±¡¢²»´¥·¢Öжϡ¢&frac14;ÆÊýʱÖÓΪAHB/8 SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; //΢Ãë¡¢ºÁÃë&frac14;¶³õÖµ fam_nus = SystemCoreClock / 8000000; fam_nms = fam_nus * 1000; //&frac14;ÆÊýÆ÷ÇåÁã SysTick->VAL = 0; } /* &sup1;¦ ÄÜ£º ΢Ãë&frac14;¶ÑÓʱ ²Î Êý£º ctr ΢ÃëÊý ·µ»ØÖµ£º ÎÞ Ëµ Ã÷£º ÓÉÓÚSysTick->LOADΪ24λµÄ&frac14;Ä´æÆ÷£¬ ¸³ÖµÊ±²»Òª´óÓÚ0xffffff/(SystemCoreClock/8000000), ¶ÔÓÚSystemCoreClock=168MµÄÇé¿öÏ£¬ctrӦСÓÚ798915us */ void Delay_us(uint32_t ctr) { uint32_t tick_flag = 0; //¶¨Ê±Æ÷³õÖµ(SysTick->LOADΪ24bit) SysTick->LOAD = ctr * fam_nus - 1; //&frac14;ÆÊýÆ÷ÇåÁã SysTick->VAL = 0x00; //¿ªÆô¶¨Ê±Æ÷ SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; do { //»ñÈ¡¶¨Ê±Æ÷״̬ tick_flag = SysTick->CTRL; } while (!(tick_flag & (1 << 16)) && (tick_flag & 0x01)); //״̬ÅÐ¶Ï //&sup1;رÕ&frac14;ÆÊ± SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; SysTick->VAL = 0x00; } /* &sup1;¦ ÄÜ£º ºÁÃë&frac14;¶ÑÓʱ ²Î Êý£º ctr ºÁÃëÊý ·µ»ØÖµ£º ÎÞ Ëµ Ã÷£º ÓÉÓÚSysTick->LOADΪ24λµÄ&frac14;Ä´æÆ÷£¬ ¸³ÖµÊ±²»Òª´óÓÚ0xffffff/(SystemCoreClock/8000000*1000), ¶ÔÓÚSystemCoreClock=168MµÄÇé¿öÏ£¬ctrӦСÓÚ798ms. ¶ÔÓÚ´óÓÚ798msµÄÇé¿ö£¬¿ÉÒÔ¶à´Îµ÷Óñ¾º¯Êý&frac12;øÐÐÊýÖµµþ&frac14;Ó£¬ Ò²¿É&frac12;«±¾º¯ÊýµÄÄÚÈÝÈ«²¿×¢ÊÍ£¬²ÉÓú¯ÊýÄ©¶ËËùÌá&sup1;©µÄwhileÑ­»·&frac14;´¿É£¨Ëæ×Åʱ&frac14;äµÄµþ&frac14;Ó£¬¿ÉÄÜ»áÓÐ&frac12;Ï´óÎó²î£© */ void Delay_ms(uint32_t ctr) { uint32_t tick_flag = 0; //¶¨Ê±Æ÷³õÖµ(SysTick->LOADΪ24bit) SysTick->LOAD = (uint32_t)ctr * fam_nms - 1; //&frac14;ÆÊýÆ÷ÇåÁã SysTick->VAL = 0x00; //¿ªÆô¶¨Ê±Æ÷ SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; do { //»ñÈ¡¶¨Ê±Æ÷״̬ tick_flag = SysTick->CTRL; } while ((tick_flag & 0x01) && !(tick_flag & (1 << 16))); //״̬ÅÐ¶Ï //&sup1;رÕ&frac14;ÆÊ± SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; SysTick->VAL = 0X00; /* while(ctr--) { Delay_us(1000); } */ } #include "usart1.h" uint16_t usart1_length = 0; //´¢´æ´®¿ÚÒ»&frac12;ÓÊÕÊý¾ÝÊý×éµÄ³¤¶È uint8_t usart1_buffer[USART1_RX_SIZE] = { 0 }; //´¢´æ´®¿ÚÒ»&frac12;ÓÊÕÊý¾ÝµÄÊý×é uint8_t usart1_tc = 0; //´®¿Ú&frac12;ÓÊÕÊý¾ÝʱµÄ&frac14;ÆÊýÆ÷ uint8_t usart1_flag = 0; //´®¿Ú±ê־λ,1 ±íʾ&frac12;ÓÊÕÍê³É,0 ±íʾ¿ÉÒÔ&frac12;ÓÊÕÊý¾Ý /* &sup1;¦ ÄÜ£º ´®¿ÚµÄ³õÊ&frac14;»¯º¯Êý ²Î Êý£º baudrate ´®¿ÚµÄ²¨ÌØÂÊ ·µ»ØÖµ£º ÎÞ */ void USART1_Init(uint32_t baudrate) { GPIO_InitTypeDef GPIO_InitStructure; //¶¨ÒåGPIO³õÊ&frac14;»¯&frac12;á&sup1;&sup1;Ìå±äÁ¿ USART_InitTypeDef USART_InitStructure; //¶¨Òå´®¿Ú³õÊ&frac14;»¯&frac12;á&sup1;&sup1;Ìå±äÁ¿ NVIC_InitTypeDef NVIC_InitStructure; //¶¨ÒåNVIC³õÊ&frac14;»¯&frac12;á&sup1;&sup1;Ìå±äÁ¿ USART1_GPIO_CLK_INIT(USART1_GPIO_CLOCK, ENABLE); //¿ªÆôÍâÉèGPIOʱÖÓ USART1_CLK_INIT(USART1_CLOCK, ENABLE); //¿ªÆôÍâÉèʱÖÓUSART //GPIOÒý&frac12;Ÿ´Óõ&frac12;´®¿ÚÉÏ GPIO_PinAFConfig(USART1_TX_PORT, USART1_TX_GPIO_PinSource, GPIO_AF_USART1); GPIO_PinAFConfig(USART1_RX_PORT, USART1_RX_GPIO_PinSource, GPIO_AF_USART1); //GPIOÅäÖà GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //¸´ÓÃÄ£Ê&frac12; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //ÍÆÍìÊä³ö GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //Êä³öËÙ¶È //USART Tx ³õÊ&frac14;»¯ GPIO_InitStructure.GPIO_Pin = USART1_TX_PIN; //Ñ¡ÔñÒý&frac12;Å GPIO_Init(USART1_TX_PORT, &GPIO_InitStructure); //³õÊ&frac14;»¯ÅäÖà //USART Rx ³õÊ&frac14;»¯ GPIO_InitStructure.GPIO_Pin = USART1_RX_PIN; //Ñ¡ÔñÒý&frac12;Å GPIO_Init(USART1_RX_PORT, &GPIO_InitStructure); //³õÊ&frac14;»¯ÅäÖà //´®¿Ú²ÎÊýÉèÖà USART_InitStructure.USART_BaudRate = baudrate; //ÉèÖò¨ÌØÂÊ USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //ÉèÖô®¿ÚÄ£Ê&frac12; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //ÉèÖÃÎÞÓ²&frac14;þÁ÷¿ØÖÆ USART_InitStructure.USART_WordLength = USART_WordLength_8b; //8bitÊý¾Ýλ USART_InitStructure.USART_Parity = USART_Parity_No; //ÎÞУÑéλ USART_InitStructure.USART_StopBits = USART_StopBits_1; //1Í£Ö&sup1;λ USART_Init(USART1, &USART_InitStructure); //³õÊ&frac14;»¯ÅäÖô®¿Ú //´®¿ÚÖжÏÏìÓ¦ÓÅÏÈ&frac14;¶ÉèÖà NVIC_InitStructure.NVIC_IRQChannel = USART1_INT_IRQn; //Ñ¡ÔñÖжÏͨµÀ NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //ÉèÖÃÏÈÕ&frac14;ÓÅÏÈ&frac14;¶ NVIC_InitStructure.NVIC_IRQChannelSubPriority = 8; //ÉèÖôÓÓÅÏÈ&frac14;¶ NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //ÉèÖÃÖжÏͨµÀ¿ªÆô NVIC_Init(&NVIC_InitStructure); //³õÊ&frac14;»¯ÅäÖÃÖжÏÓÅÏÈ&frac14;¶ USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //¿ªÆô´®¿Ú&frac12;ÓÊÕÖжÏÊ&sup1;ÄÜ USART_Cmd(USART1, ENABLE); //¿ªÆô´®¿Ú } /* &sup1;¦ ÄÜ£º ´®¿Ú·¢Ë͵¥×Ö&frac12;ÚÊý¾Ý ²Î Êý£º src ·¢Ë͵ĵ¥×Ö&frac12;ÚÊý¾Ý ·µ»ØÖµ£º ÎÞ */ void USART1_Send_Byte(uint8_t src) { USART_SendData(USART1, src); //·¢ËÍÊý¾Ý while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); //µÈ´ý´®¿Ú·¢ËÍÍê³É } /* &sup1;¦ ÄÜ£º ´®¿Ú·¢ËÍÒ»¶¨³¤¶ÈµÄ×Ö&frac12;ÚÊý¾Ý ²Î Êý£º src ·¢Ë͵Ä×Ö·û´®Êý¾Ý length ·¢ËÍ×Ö&frac12;Ú/×Ö·ûµÄ³¤¶È ·µ»ØÖµ£º ÎÞ */ void USART1_Send_Length_String(uint8_t* src, uint16_t length) { uint16_t Tx_cut = 0; uint16_t Tx_length = 0; Tx_length = length; while (Tx_cut != Tx_length) //Ñ­»··¢ËÍÖ¸¶¨³¤¶ÈµÄÊý¾Ý { USART1_Send_Byte(*(src + Tx_cut)); //·¢ËÍÒ»¸ö×Ö&frac12;ÚÐÅÏ¢ Tx_cut++; //Ö¸Õë×ÔÔö } } /* &sup1;¦ ÄÜ£º ´®¿Ú·¢ËÍ×Ö·û´®Êý¾Ý ²Î Êý£º src ·¢Ë͵Ä×Ö·û´®Êý¾Ý,ÒÔ'\0'&frac14;´0x00±êʶ&frac12;áÊø·¢ËÍÊý¾Ý ·µ»ØÖµ£º ÎÞ */ void USART1_Send_String(char* src) { uint16_t Tx_cut = 0; while (*(src + Tx_cut) != '\0') //&frac14;ì²âµ&frac12;ÏÂÒ»¸ö·¢ËÍ×Ö&frac12;ÚΪ'\0'ʱͣÖ&sup1;·¢ËÍ { USART1_Send_Byte(*(src + Tx_cut)); //·¢ËÍÒ»¸ö×Ö&frac12;ÚÐÅÏ¢ Tx_cut++; //Ö¸Õë×ÔÔö } } /* &sup1;¦ ÄÜ£º ´®¿ÚÇå³ý´¢´æÊý×éµÄÊý¾Ý ²Î Êý£º ÎÞ ·µ»ØÖµ£º ÎÞ */ void USART1_Clear_Buffer(void) { while (usart1_length) //Çå¿Õ&frac12;ÓÊÕµ&frac12;µÄÊý¾Ý { usart1_length--; //Ö¸Õë×Ô&frac14;õ usart1_buffer[usart1_length] = 0; //Êý¾ÝÇåÁã } } /* &sup1;¦ ÄÜ£º ´®¿ÚµÄ&frac12;ÓÊÕÖжϷþÎñº¯Êý ²Î Êý£º ÎÞ ·µ»ØÖµ£º ÎÞ */ void USART1_INT_IRQHandler(void) { if (USART_GetITStatus(USART1, USART_IT_RXNE) == SET) //Åжϴ®¿Ú&frac12;ÓÊÕÖжϱê־λ { usart1_buffer[usart1_length++] = USART_ReceiveData(USART1); //¶ÁÈ¡´®¿ÚÊý¾Ý if (usart1_length >= USART1_RX_SIZE) //Èç&sup1;û´¢´æ³¬³ö³¤¶È { usart1_length = 0; //ÖØÐ´ÓÊý×é0¿ªÊ&frac14;´¢´æ×Ö&frac12;Ú } } USART_ClearITPendingBit(USART1, USART_IT_RXNE); //Çå³ý´®¿ÚÖжÏ&frac12;ÓÊÕ±ê־λ } /********************printfÖØ¶¨ÏòΪ´®¿ÚÊä³ö********************/ #ifdef __GNUC__ /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf set to 'Yes') calls __io_putchar() */ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #else #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) #endif /* __GNUC__ */ int fputc(int ch, FILE *f) { USART_SendData(USART1, (uint16_t)ch); //·¢ËÍÊý¾Ý while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);//µÈ´ý´®¿Ú·¢ËÍÍê³É return ch; }#include "stm32f4xx.h" #include "delay.h" #include "led.h" #include "timer3.h" #include "usart1.h" int main(void) { }定时器:结合串口通信实验,使用定时器中断和串口接收中断完成串口通信实验。系统上电后,STM32发送“ready!”字符串字符给PC,设定1-100数值,开始倒计时,例如设置初始数值为30,就进行30s倒计时,每倒计时1s就给PC串口发送一个数值,例如:30、29、28...;倒计时结束后停止发送。
11-08
#include <reg52.h> //------------------------- Òý&frac12;Ŷ¨Òå --------------------------// sbit BEEP = P2^0; //·äÃùÆ÷¿ØÖÆÒý&frac12;Å£¬?µçÆ&frac12;ÓÐЧ sbit LED1 = P2^3; //LED1£¬¿ØÖÆÒý&frac12;Å£¬µÍµçÆ&frac12;ÓÐЧ sbit LED2 = P2^2; //LED2£¬¿ØÖÆÒý&frac12;Å£¬µÍµçÆ&frac12;ÓÐЧ sbit LED3 = P2^1; //LED3£¬¿ØÖÆÒý&frac12;Å£¬µÍµçÆ&frac12;ÓÐЧ //ÊýÂë&sup1;ÜÒý&frac12;Ŷ¨Òå #define duanPore P0 //ÊýÂë&sup1;ܶοØÖƶ˿ڣ¬¸ßµçÆ&frac12;ÓÐЧ sbit DIG1 = P2^4; //ÊýÂë&sup1;ܵÚ1λλѡ¿ØÖƶ˿ڣ¬µÍµçÆ&frac12;ÓÐЧ sbit DIG2 = P2^5; //ÊýÂë&sup1;ܵÚ2λλѡ¿ØÖƶ˿ڣ¬µÍµçÆ&frac12;ÓÐЧ sbit DIG3 = P2^6; //ÊýÂë&sup1;ܵÚ3λλѡ¿ØÖƶ˿ڣ¬µÍµçÆ&frac12;ÓÐЧ sbit DIG4 = P2^7; //ÊýÂë&sup1;ܵÚ4λλѡ¿ØÖƶ˿ڣ¬µÍµçÆ&frac12;ÓÐЧ //°´&frac14;üÒý&frac12;Ŷ¨Òå sbit KEY1 = P1^0; //1ºÅÑ¡ÊÖ sbit KEY2 = P1^1; //2ºÅÑ¡ÊÖ sbit KEY3 = P1^2; //3ºÅÑ¡ÊÖ sbit KEY4 = P1^3; //4ºÅÑ¡ÊÖ sbit KEY5 = P1^4; //5ºÅÑ¡ÊÖ sbit KEY6 = P1^5; //6ºÅÑ¡ÊÖ sbit KEY7 = P3^2; //Ö÷³ÖÈË&frac14;ü sbit KEY8 = P3^3; //ÉèÖÃ&frac14;ü //---------------------- È«¾Ö±äÁ¿¶¨Òå --------------------// //ÊýÂë&sup1;ܶÎÂë±í£¬ÊÊÓÃÓÚ&sup1;²ÒõÊýÂë&sup1;Ü unsigned char code tab_duan[19] = { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, //0~9 0x77,0x7c,0x39,0x5e,0x79,0x71, //A~F 0x40,0x00,0x48 //'-'£¬&sup1;رÕÏÔʾ£¬'=' }; unsigned char dat_buf[4] = {17, 17, 0, 5}; //ÏÔʾÊý¾Ý»º´æÇø£¬Ä¬ÈÏÉϵçÏÔʾ" 05" int time = 5, time1 = 5, time2 = 20; //µ&sup1;&frac14;ÆÊ±Ê±&frac14;䣬time1£ºÇÀ´ðµ&sup1;&frac14;ÆÊ±Ê±&frac14;䣬time2£º»Ø´ðµ&sup1;&frac14;ÆÊ±Ê±&frac14;ä unsigned char i = 0; unsigned int count = 0; //&frac14;ÆÊý»º´æ±äÁ¿ bit flag_lock = 1; //&frac14;üÅÌËø¶¨±êÖ¾£¬1£º²»Ëø¶¨£¬0£ºËø¶¨ //------------------------------- º¯ÊýÉùÃ÷ ------------------------------------// void DelayMs(unsigned int ms); //ÑÓʱº¯Êý£¬µ¥Î»£ºms void dig_scan(unsigned char *dat); unsigned char KeyScan(void); //¶ÀÁ¢°´&frac14;üɨÃè void InitTimer0(void); //¶¨Ê±Æ÷0³õÊ&frac14;»¯ void alarm(void); //±¨¾¯º¯Êý void AnswerTask(void); //ÇÀ´ðÈÎÎñ void SetTime(void); //ÉèÖõ&sup1;&frac14;ÆÊ±Ê±&frac14;ä /* Ö÷º¯Êý */ void main(void) { BEEP = 0; //ÉϵçĬÈÏ&sup1;رշäÃùÆ÷ LED1 = 1; InitTimer0(); //¶¨Ê±Æ÷0³õÊ&frac14;»¯ time = time1; //ÉϵçĬÈÏÇÀ´ðµ&sup1;&frac14;ÆÊ± while(1) { if(KeyScan() == 7) //Èç&sup1;ûÖ÷³ÖÈË&frac14;ü°´Ï£¬Ôò&frac12;øÐÐÇÀ´ð { alarm(); //·äÃùÆ÷ÏìÒ»Éù AnswerTask(); //&frac12;øÐÐÇÀ´ðÈÎÎñ } if(KeyScan() == 8) //Èç&sup1;ûÉèÖÃ&frac14;ü°´Ï£¬&frac12;øÈëÉèÖõ&sup1;&frac14;ÆÊ±Ê±&frac14;ä { alarm(); //·äÃùÆ÷ÏìÒ»Éù SetTime(); //&frac12;øÈëÉè&frac14;Ƶ&sup1;&frac14;ÆÊ±Ê±&frac14;ä } dat_buf[0] = 17; dat_buf[1] = 17; dat_buf[2] = time / 10; //È¡³öµ&sup1;&frac14;ÆÊ±µÄʮλÊý dat_buf[3] = time % 10; //È¡³öµ&sup1;&frac14;ÆÊ±µÄ¸öλÊý dig_scan(dat_buf); //²âÊÔÊýÂë&sup1;ÜÏÔʾ } } /* ÑÓʱº¯Êý£¬µ¥Î»£ºms */ void DelayMs(unsigned int ms) { unsigned char a,b,c; while(--ms) { for(c=1;c>0;c--) for(b=142;b>0;b--) for(a=2;a>0;a--); } } /* ÊýÂë&sup1;ÜÏÔʾɨÃè */ void dig_scan(unsigned char *dat) { /* ¶¯Ì¬É¨Ãè´¦Àí */ switch(i) { case 0: { duanPore = tab_duan[dat[0]]; //ÏÔʾµÚ1λÊýÂë&sup1;ÜÄÚÈÝ DIG1 = 0; break; } case 1: { duanPore = tab_duan[dat[1]]; //ÏÔʾµÚ2λÊýÂë&sup1;ÜÄÚÈÝ DIG2 = 0; //ѡͨµÚ2λÊýÂë&sup1;Ü break; } case 2: { duanPore = tab_duan[dat[2]]; //ÏÔʾµÚ3λÊýÂë&sup1;ÜÄÚÈÝ DIG3 = 0; //ѡͨµÚ3λÊýÂë&sup1;Ü break; } case 3: { duanPore = tab_duan[dat[3]]; //ÏÔʾµÚ4λÊýÂë&sup1;ÜÄÚÈÝ DIG4 = 0; //ѡͨµÚ4λÊýÂë&sup1;Ü break; } default: break; } DelayMs(5); //ɨÃèÑÓʱ10ms£¬¸ù¾Ýʵ&frac14;ÊÇé¿öÊʵ±Ð޸ĸÄÑÓʱʱ&frac14;ä DIG1 = 1; //ÏûÒþ DIG2 = 1; DIG3 = 1; DIG4 = 1; ++i; //ɨÃè±äÁ¿Ñ­»· if(i > 3) i = 0; } /* ¶ÀÁ¢°´&frac14;üɨÃè */ unsigned char KeyScan(void) { if(KEY1 == 0) //Èç&sup1;û°´&frac14;ü1°´Ï { DelayMs(10); //ÑÓʱ10msÈ¥³ý°´&frac14;ü¶¶¶¯ if(KEY1 == 0) //ÔÙÈ·ÈÏÒ»´Î°´&frac14;ü°´Ï£¬±íʾµ&frac12;Õâ°´&frac14;üÒѾ­Îȶ¨ÁË return 1; //Êä³ö°´&frac14;üÖµ1 } if(KEY2 == 0) //Èç&sup1;û°´&frac14;ü2°´Ï { DelayMs(10); //ÑÓʱ10msÈ¥³ý°´&frac14;ü¶¶¶¯ if(KEY2 == 0) //ÔÙÈ·ÈÏÒ»´Î°´&frac14;ü°´Ï£¬±íʾµ&frac12;Õâ°´&frac14;üÒѾ­Îȶ¨ÁË return 2; //Êä³ö°´&frac14;üÖµ2 } if(KEY3 == 0) //Èç&sup1;û°´&frac14;ü3°´Ï { DelayMs(10); //ÑÓʱ10msÈ¥³ý°´&frac14;ü¶¶¶¯ if(KEY3 == 0) //ÔÙÈ·ÈÏÒ»´Î°´&frac14;ü°´Ï£¬±íʾµ&frac12;Õâ°´&frac14;üÒѾ­Îȶ¨ÁË return 3; //Êä³ö°´&frac14;üÖµ3 } if(KEY4 == 0) //Èç&sup1;û°´&frac14;ü4°´Ï { DelayMs(10); //ÑÓʱ10msÈ¥³ý°´&frac14;ü¶¶¶¯ if(KEY4 == 0) //ÔÙÈ·ÈÏÒ»´Î°´&frac14;ü°´Ï£¬±íʾµ&frac12;Õâ°´&frac14;üÒѾ­Îȶ¨ÁË return 4; //Êä³ö°´&frac14;üÖµ4 } if(KEY5 == 0) //Èç&sup1;û°´&frac14;ü5°´Ï { DelayMs(10); //ÑÓʱ10msÈ¥³ý°´&frac14;ü¶¶¶¯ if(KEY5 == 0) //ÔÙÈ·ÈÏÒ»´Î°´&frac14;ü°´Ï£¬±íʾµ&frac12;Õâ°´&frac14;üÒѾ­Îȶ¨ÁË return 5; //Êä³ö°´&frac14;üÖµ5 } if(KEY6 == 0) //Èç&sup1;û°´&frac14;ü6°´Ï { DelayMs(10); //ÑÓʱ10msÈ¥³ý°´&frac14;ü¶¶¶¯ if(KEY6 == 0) //ÔÙÈ·ÈÏÒ»´Î°´&frac14;ü°´Ï£¬±íʾµ&frac12;Õâ°´&frac14;üÒѾ­Îȶ¨ÁË return 6; //Êä³ö°´&frac14;üÖµ6 } if(KEY7 == 0) //Èç&sup1;û°´&frac14;ü7°´Ï { DelayMs(10); //ÑÓʱ10msÈ¥³ý°´&frac14;ü¶¶¶¯ if(KEY7 == 0) //ÔÙÈ·ÈÏÒ»´Î°´&frac14;ü°´Ï£¬±íʾµ&frac12;Õâ°´&frac14;üÒѾ­Îȶ¨ÁË return 7; //Êä³ö°´&frac14;üÖµ7 } if(KEY8 == 0) //Èç&sup1;û°´&frac14;ü8°´Ï { DelayMs(10); //ÑÓʱ10msÈ¥³ý°´&frac14;ü¶¶¶¯ if(KEY8 == 0) //ÔÙÈ·ÈÏÒ»´Î°´&frac14;ü°´Ï£¬±íʾµ&frac12;Õâ°´&frac14;üÒѾ­Îȶ¨ÁË return 8; //Êä³ö°´&frac14;üÖµ8 } return 0; //ÎÞ°´&frac14;ü°´ÏÂÊä³ö0 } /* ¶¨Ê±Æ÷0³õÊ&frac14;»¯ */ void InitTimer0(void) { TMOD = 0x01; //ÅäÖö¨Ê±Æ÷0Ϊ&sup1;¤×÷Ä£Ê&frac12;1£¬16λ¶¨Ê±Æ÷ TH0 = (65536 - 10000) / 256; //¶¨Ê±10ms TL0 = (65536 - 10000) % 256; EA = 1; //´ò¿ª×ÜÖÐ¶Ï ET0 = 1; //´ò¿ª¶¨Ê±Æ÷0ÖÐ¶Ï TR0 = 0; //ÉϵçĬÈÏ&sup1;رն¨Ê±Æ÷0 } /* ¶¨Ê±Æ÷0ÖжϷþÎñº¯Êý£¬10ms&frac12;øÒ»´ÎÖÐ¶Ï */ void Timer0Interrupt(void) interrupt 1 { TH0 = (65536 - 10000) / 256; //¶¨Ê±10ms£¬ÖØÐÂ×°ÔØ&frac14;ÆÊýÖµ TL0 = (65536 - 10000) % 256; ++count; if(count > 100) //1sʱ&frac14;ä&frac14;ÆË㣺10ms * 100 = 1s { count = 0; //&frac14;ÆÊýÖµÇåÁã --time; //µ&sup1;&frac14;ÆÊ±Ê±&frac14;ä&frac14;õÒ»´Î if(time <= 0) //Èç&sup1;ûµ&sup1;&frac14;ÆÊ±&frac12;áÊø£¬Ôò&sup1;رն¨Ê±Æ÷0£¬Í£Ö&sup1;µ&sup1;&frac14;ÆÊ±£¬²¢Éù&sup1;ⱨ¾¯ºÍËø¶¨&frac14;üÅÌ { TR0 = 0; //&sup1;رն¨Ê±Æ÷0 BEEP = 1; //Éù&sup1;ⱨ¾¯ LED1 = 0; flag_lock = 0; //Ëø¶¨&frac14;üÅÌ } } } /* ±¨¾¯º¯Êý */ void alarm(void) { BEEP = 1; //·äÃùÆ÷ÏìһϠDelayMs(300); //ÑÓʱ300ms BEEP = 0; } /* ʵÏÖÇÀ´ðÈÎÎñ */ void AnswerTask(void) { unsigned char key_val; //°´&frac14;üÖµ»º´æ TR0 = 1; //Æô¶¯¶¨Ê±Æ÷0£¬¿ªÊ&frac14;µ&sup1;&frac14;ÆÊ± while(1) { if(flag_lock == 1) { key_val = KeyScan(); //»ñÈ¡°´&frac14;üÖµ switch(key_val) { case 1: { dat_buf[0] = key_val; //µÚ1λÊýÂë&sup1;ÜÏÔʾ1ºÅ dat_buf[1] = 16; //ÏÔʾ'-' time = time2; //»Ø´ðµ&sup1;&frac14;ÆÊ±£¬Ñ¡Êֻشðʱ&frac14;ä alarm(); //·äÃùÆ÷ÏìһϠflag_lock = 0; //Ëø¶¨&frac14;üÅÌ break; } case 2: { dat_buf[0] = key_val; //µÚ2λÊýÂë&sup1;ÜÏÔʾ2ºÅ dat_buf[1] = 16; //ÏÔʾ'-' time = time2; //»Ø´ðµ&sup1;&frac14;ÆÊ±£¬Ñ¡Êֻشðʱ&frac14;ä alarm(); //·äÃùÆ÷ÏìһϠflag_lock = 0; break; } case 3: { dat_buf[0] = key_val; //µÚ3λÊýÂë&sup1;ÜÏÔʾ3ºÅ dat_buf[1] = 16; //ÏÔʾ'-' time = time2; alarm(); //·äÃùÆ÷ÏìһϠflag_lock = 0; break; } case 4: { dat_buf[0] = key_val; //µÚ4λÊýÂë&sup1;ÜÏÔʾ4ºÅ dat_buf[1] = 16; //ÏÔʾ'-' time = time2; alarm(); //·äÃùÆ÷ÏìһϠflag_lock = 0; break; } case 5: { dat_buf[0] = key_val; //µÚ5λÊýÂë&sup1;ÜÏÔʾ5ºÅ dat_buf[1] = 16; //ÏÔʾ'-' time = time2; alarm(); //·äÃùÆ÷ÏìһϠflag_lock = 0; break; } case 6: { dat_buf[0] = key_val; //µÚ6λÊýÂë&sup1;ÜÏÔʾ6ºÅ dat_buf[1] = 16; //ÏÔʾ'-' time = time2; alarm(); //·äÃùÆ÷ÏìһϠflag_lock = 0; break; } default: break; } } dat_buf[2] = time / 10; //È¡³öµ&sup1;&frac14;ÆÊ±µÄʮλÊý dat_buf[3] = time % 10; //È¡³öµ&sup1;&frac14;ÆÊ±µÄ¸öλÊý dig_scan(dat_buf); //ÊýÂë&sup1;ÜÏÔʾÄÚÈÝ } } /* ÉèÖõ&sup1;&frac14;ÆÊ±Ê±&frac14;ä */ void SetTime(void) { unsigned char mode = 0; //0£ºµ÷&frac12;ÚÇÀ´ðµ&sup1;&frac14;ÆÊ±£¬1£ºµ÷&frac12;ڻشðµ&sup1;&frac14;ÆÊ±£¬2£ºÍ˳ö while(1) { if(KeyScan() == 8) //Èç&sup1;ûÔٴΰ´ÏÂÉèÖÃ&frac14;ü£¬ÔòÍ˳öÉèÖÃ&sup1;¦ÄÜ { alarm(); //·äÃùÆ÷ÏìÒ»Éù ++mode; if(mode >= 2) break; //Ìø³öµ±Ç°ËÀÑ­»· } if(KeyScan() == 7) //Èç&sup1;û°´ÏÂ&frac14;Ó&frac14;ü£¬&frac12;øÐе÷ʱ { alarm(); //·äÃùÆ÷ÏìÒ»Éù if(mode == 0) //µ÷&frac12;ÚÇÀ´ðµ&sup1;&frac14;ÆÊ± { ++time1; //µ&sup1;&frac14;ÆÊ±Ê±&frac14;ä&frac14;ÓÒ»´Î if(time1 > 30) //µ÷ʱ·¶Î§£º5s~30s time1 = 5; } if(mode == 1) //µ÷&frac12;ڻشðµ&sup1;&frac14;ÆÊ± { ++time2; //µ&sup1;&frac14;ÆÊ±Ê±&frac14;ä&frac14;ÓÒ»´Î if(time2 > 30) //µ÷ʱ·¶Î§£º5s~30s time2 = 5; } } /* µ÷ʱÏÔʾ´¦Àí */ if(mode == 0) { dat_buf[0] = 16; //ÏÔʾ'-' dat_buf[1] = time1 / 10; //È¡³öµ&sup1;&frac14;ÆÊ±µÄʮλÊý dat_buf[2] = time1 % 10; //È¡³öµ&sup1;&frac14;ÆÊ±µÄ¸öλÊý dat_buf[3] = 16; //ÏÔʾ'-' } if(mode == 1) { dat_buf[0] = 18; //ÏÔʾ'=' dat_buf[1] = time2 / 10; //È¡³öµ&sup1;&frac14;ÆÊ±µÄʮλÊý dat_buf[2] = time2 % 10; //È¡³öµ&sup1;&frac14;ÆÊ±µÄ¸öλÊý dat_buf[3] = 18; //ÏÔʾ'=' } dig_scan(dat_buf); //ÊýÂë&sup1;ÜÏÔʾÄÚÈÝ } time = time1; //»Øµ&frac12;Ö÷&frac12;çÃæÏÔʾÇÀ´ðµ&sup1;&frac14;ÆÊ± }写出一个这样的代码,主持人是1.0,时间调节是1.1,选手1.2-1.7,蜂鸣器是3.3,LED是3.4,数码管1234是2.0-2.3
09-19
#include "sys.h" #include "usart.h" ////////////////////////////////////////////////////////////////////////////////// //Èç&sup1;ûÊ&sup1;ÓÃucos,Ôò°üÀ¨ÏÂÃæµÄÍ·ÎÄ&frac14;þ&frac14;´¿É. #if SYSTEM_SUPPORT_OS #include "includes.h" //ucos Ê&sup1;Óà #endif ////////////////////////////////////////////////////////////////////////////////// //±¾³ÌÐòÖ»&sup1;©Ñ§Ï°Ê&sup1;Óã¬Î´¾­×÷ÕßÐí¿É£¬²»µÃÓÃÓÚÆäËüÈκÎÓÃ; //ALIENTEK STM32F4Ì&frac12;Ë÷Õß¿ª·¢°å //´®¿Ú1³õÊ&frac14;»¯ //ÕýµãÔ­×Ó@ALIENTEK //&frac14;&frac14;ÊõÂÛ̳:www.openedv.com //ÐÞ¸ÄÈÕÆÚ:2014/6/10 //°æ±¾£ºV1.5 //°æÈ¨ËùÓУ¬µÁ°æ±Ø¾¿¡£ //Copyright(C) &sup1;ãÖÝÊÐÐÇÒíµç×Ó¿Æ&frac14;&frac14;ÓÐÏÞ&sup1;«Ë¾ 2009-2019 //All rights reserved //******************************************************************************** //V1.3ÐÞ¸Ä˵Ã÷ //Ö§³ÖÊÊÓ¦²»Í¬ÆµÂÊϵĴ®¿Ú²¨ÌØÂÊÉèÖÃ. //&frac14;ÓÈëÁ˶ÔprintfµÄÖ§³Ö //Ôö&frac14;ÓÁË´®¿Ú&frac12;ÓÊÕÃüÁî&sup1;¦ÄÜ. //ÐÞÕýÁËprintfµÚÒ»¸ö×Ö·û¶ªÊ§µÄbug //V1.4ÐÞ¸Ä˵Ã÷ //1,Ð޸Ĵ®¿Ú³õÊ&frac14;»¯IOµÄbug //2,ÐÞ¸ÄÁËUSART_RX_STA,Ê&sup1;µÃ´®¿Ú×î´ó&frac12;ÓÊÕ×Ö&frac12;ÚÊýΪ2µÄ14´Î·&frac12; //3,Ôö&frac14;ÓÁËUSART_REC_LEN,ÓÃÓÚ¶¨Òå´®¿Ú×î´óÔÊÐí&frac12;ÓÊÕµÄ×Ö&frac12;ÚÊý(²»´óÓÚ2µÄ14´Î·&frac12;) //4,ÐÞ¸ÄÁËEN_USART1_RXµÄÊ&sup1;ÄÜ·&frac12;Ê&frac12; //V1.5ÐÞ¸Ä˵Ã÷ //1,Ôö&frac14;ÓÁ˶ÔUCOSIIµÄÖ§³Ö ////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////// //&frac14;ÓÈëÒÔÏ´úÂë,Ö§³Öprintfº¯Êý,¶ø²»ÐèҪѡÔñuse MicroLIB #if 1 #pragma import(__use_no_semihosting) //±ê×&frac14;¿âÐèÒªµÄÖ§³Öº¯Êý struct __FILE { int handle; }; FILE __stdout; //¶¨Òå_sys_exit()ÒÔ±ÜÃâÊ&sup1;ÓðëÖ÷»úÄ£Ê&frac12; _sys_exit(int x) { x = x; } //ÖØ¶¨Òåfputcº¯Êý int fputc(int ch, FILE *f) { while((USART1->SR&0X40)==0);//Ñ­»··¢ËÍ,Ö±µ&frac12;·¢ËÍÍê±Ï USART1->DR = (u8) ch; return ch; } #endif #if EN_USART1_RX //Èç&sup1;ûÊ&sup1;ÄÜÁË&frac12;ÓÊÕ //´®¿Ú1ÖжϷþÎñ³ÌÐò //×¢Òâ,¶ÁÈ¡USARTx->SRÄܱÜÃâĪÃûÆäÃîµÄ´íÎó u8 USART_RX_BUF[USART_REC_LEN]; //&frac12;ÓÊÕ»º³å,×î´óUSART_REC_LEN¸ö×Ö&frac12;Ú. //&frac12;ÓÊÕ״̬ //bit15£¬ &frac12;ÓÊÕÍê³É±êÖ¾ //bit14£¬ &frac12;ÓÊÕµ&frac12;0x0d //bit13~0£¬ &frac12;ÓÊÕµ&frac12;µÄÓÐЧ×Ö&frac12;ÚÊýÄ¿ u16 USART_RX_STA=0; //&frac12;ÓÊÕ״̬±ê&frac14;Ç //³õÊ&frac14;»¯IO ´®¿Ú1 //bound:²¨ÌØÂÊ void uart_init(u32 bound){ //GPIO¶Ë¿ÚÉèÖà GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); //Ê&sup1;ÄÜGPIOAʱÖÓ RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//Ê&sup1;ÄÜUSART1ʱÖÓ //´®¿Ú1¶ÔÓ¦Òý&frac12;Ÿ´ÓÃÓ³Éä GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1); //GPIOA9¸´ÓÃΪUSART1 GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1); //GPIOA10¸´ÓÃΪUSART1 //USART1¶Ë¿ÚÅäÖà GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; //GPIOA9ÓëGPIOA10 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//¸´ÓÃ&sup1;¦ÄÜ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //ËÙ¶È50MHz GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //ÍÆÍ츴ÓÃÊä³ö GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //ÉÏÀ­ GPIO_Init(GPIOA,&GPIO_InitStructure); //³õÊ&frac14;»¯PA9£¬PA10 //USART1 ³õÊ&frac14;»¯ÉèÖà USART_InitStructure.USART_BaudRate = bound;//²¨ÌØÂÊÉèÖà USART_InitStructure.USART_WordLength = USART_WordLength_8b;//×Ö³¤Îª8λÊý¾Ý¸ñÊ&frac12; USART_InitStructure.USART_StopBits = USART_StopBits_1;//Ò»¸öÍ£Ö&sup1;λ USART_InitStructure.USART_Parity = USART_Parity_No;//ÎÞÆæÅ&frac14;УÑéλ USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//ÎÞÓ²&frac14;þÊý¾ÝÁ÷¿ØÖÆ USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //ÊÕ·¢Ä£Ê&frac12; USART_Init(USART1, &USART_InitStructure); //³õÊ&frac14;»¯´®¿Ú1 USART_Cmd(USART1, ENABLE); //Ê&sup1;ÄÜ´®¿Ú1 //USART_ClearFlag(USART1, USART_FLAG_TC); #if EN_USART1_RX USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//¿ªÆôÏà&sup1;ØÖÐ¶Ï //Usart1 NVIC ÅäÖà NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;//´®¿Ú1ÖжÏͨµÀ NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;//ÇÀÕ&frac14;ÓÅÏÈ&frac14;¶3 NVIC_InitStructure.NVIC_IRQChannelSubPriority =3; //×ÓÓÅÏÈ&frac14;¶3 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQͨµÀÊ&sup1;ÄÜ NVIC_Init(&NVIC_InitStructure); //¸ù¾ÝÖ¸¶¨µÄ²ÎÊý³õÊ&frac14;»¯VIC&frac14;Ä´æÆ÷¡¢ #endif } void USART1_IRQHandler(void) //´®¿Ú1ÖжϷþÎñ³ÌÐò { u8 Res; #if SYSTEM_SUPPORT_OS //Èç&sup1;ûSYSTEM_SUPPORT_OSÎªÕæ£¬ÔòÐèÒªÖ§³ÖOS. OSIntEnter(); #endif if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //&frac12;ÓÊÕÖжÏ(&frac12;ÓÊÕµ&frac12;µÄÊý¾Ý±ØÐëÊÇ0x0d 0x0a&frac12;áβ) { Res =USART_ReceiveData(USART1);//(USART1->DR); //¶ÁÈ¡&frac12;ÓÊÕµ&frac12;µÄÊý¾Ý if((USART_RX_STA&0x8000)==0)//&frac12;ÓÊÕδÍê³É { if(USART_RX_STA&0x4000)//&frac12;ÓÊÕµ&frac12;ÁË0x0d { if(Res!=0x0a)USART_RX_STA=0;//&frac12;ÓÊÕ´íÎó,ÖØÐ¿ªÊ&frac14; else USART_RX_STA|=0x8000; //&frac12;ÓÊÕÍê³ÉÁË } else //»&sup1;ûÊÕµ&frac12;0X0D { if(Res==0x0d)USART_RX_STA|=0x4000; else { USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ; USART_RX_STA++; if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//&frac12;ÓÊÕÊý¾Ý´íÎó,ÖØÐ¿ªÊ&frac14;&frac12;ÓÊÕ } } } } #if SYSTEM_SUPPORT_OS //Èç&sup1;ûSYSTEM_SUPPORT_OSÎªÕæ£¬ÔòÐèÒªÖ§³ÖOS. OSIntExit(); #endif } #endif 这个是usart.c的代码,请根据之前的报错以及修复方法完善这份代码
10-30
#include "rc522.h" #include "usart.h" #include "string.h" #include "led.h" #include <stdlib.h> #include "sys.h" // // M1¿¨·ÖΪ16¸öÉÈÇø£¬Ã¿¸öÉÈÇøÓÉËĸö¿é£¨¿é0¡¢¿é1¡¢¿é2¡¢¿é3£©×é³É // &frac12;«16¸öÉÈÇøµÄ64¸ö¿é°´¾ø¶ÔµØÖ·±àºÅΪ£º0~63 // µÚ0¸öÉÈÇøµÄ¿é0£¨&frac14;´¾ø¶ÔµØÖ·0¿é£©£¬ÓÃÓÚ´æ·Å³§ÉÌ´úÂ룬ÒѾ­&sup1;Ì»¯²»¿É¸ü¸Ä // ÿ¸öÉÈÇøµÄ¿é0¡¢¿é1¡¢¿é2ΪÊý¾Ý¿é£¬¿ÉÓÃÓÚ´æ·ÅÊý¾Ý // ÿ¸öÉÈÇøµÄ¿é3Ϊ¿ØÖƿ飨¾ø¶ÔµØÖ·Îª:¿é3¡¢¿é7¡¢¿é11.....£©°üÀ¨ÃÜÂëA£¬´æÈ¡¿ØÖÆ¡¢ÃÜÂëBµÈ /******************************* *Á¬Ïß˵Ã÷£º *1--SDA <----->PC2 *2--SCK <----->PC3 *3--MISO <----->PC4 *4--MOSI <----->PC5 *5--Ðü¿Õ *6--GND <----->GND *7--RST <----->PC6 *8--VCC <----->VCC 3.3v ************************************/ /*È«¾Ö±äÁ¿*/ unsigned char CT[2]; //¿¨ÀàÐÍ unsigned char SN[4]; //¿¨ºÅ£¨µÍ×Ö&frac12;ÚÔÚǰ£¬¸ß×Ö&frac12;ÚÔÚºó£© unsigned char RFID[16]; //´æ·ÅRFID unsigned char total=0; //´æ·Å¿¨ºÅµÄ¿¨¿â unsigned char card_book[card_number_max][5]= { {243,178,161,29}, {51,58,119,13} }; unsigned char card_human[card_number_max][5]= { {147,62,245,149}, {211,249,42,226} }; unsigned char card_bit[card_number_max]={"\0"}; //¶ÁÈ¡µ&frac12;ÒÑÂ&frac14;È뿨ºÅ¿âµÄÏàÓ¦¿¨µÄ±ê־λ u8 KEY[6]={0xff,0xff,0xff,0xff,0xff,0xff}; //ÉÈÇøÃÜÂëA/B u8 AUDIO_OPEN[6] = {0xAA, 0x07, 0x02, 0x00, 0x09, 0xBC}; unsigned char RFID1[16]={0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x07,0x80,0x29,0xff,0xff,0xff,0xff,0xff,0xff}; /*º¯ÊýÉùÃ÷*/ unsigned char status; unsigned char s=0x08; void RC522_Init ( void ) { SPI1_Init(); RC522_Reset_Disable(); RC522_CS_Disable(); PcdReset (); M500PcdConfigISOType ( 'A' );//ÉèÖÃ&sup1;¤×÷·&frac12;Ê&frac12; } void SPI1_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOC, ENABLE );//PORTCʱÖÓÊ&sup1;ÄÜ RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOA, ENABLE ); // CS GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //ÆÕͨÊä³ö GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO¿ÚËÙ¶ÈΪ50MHz GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //ÍÆÍìÊä³ö GPIO_Init(GPIOC, &GPIO_InitStructure); //¸ù¾ÝÉ趨²ÎÊý³õÊ&frac14;»¯ // SCK GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //ÆÕͨÊä³ö GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO¿ÚËÙ¶ÈΪ50MHz GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //ÍÆÍìÊä³ö GPIO_Init(GPIOC, &GPIO_InitStructure); // MISO GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; //ÆÕͨÊäÈë GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO¿ÚËÙ¶ÈΪ50MHz GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //ÍÆÍìÊäÈë GPIO_Init(GPIOC, &GPIO_InitStructure); // MOSI GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //ÆÕͨÊä³ö GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO¿ÚËÙ¶ÈΪ50MHz GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //ÍÆÍìÊä³ö GPIO_Init(GPIOC, &GPIO_InitStructure); // RST GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //ÆÕͨÊä³ö GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO¿ÚËÙ¶ÈΪ50MHz GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //ÍÆÍìÊä³ö GPIO_Init(GPIOC, &GPIO_InitStructure); } /* * º¯ÊýÃû£ºSPI_RC522_SendByte * ÃèÊö £ºÏòRC522·¢ËÍ1 Byte Êý¾Ý * ÊäÈë £ºbyte£¬Òª·¢Ë͵ÄÊý¾Ý * ·µ»Ø : RC522·µ»ØµÄÊý¾Ý * µ÷Óà £ºÄÚ²¿µ÷Óà */ void SPI_RC522_SendByte ( u8 byte ) { u8 counter; for(counter=0;counter<8;counter++) { if ( byte & 0x80 ) RC522_MOSI_1 (); else RC522_MOSI_0 (); // delay_ms ( 3 ); RC522_DELAY(); RC522_SCK_0 (); // delay_ms ( 1 ); // delay_ms ( 3 ); RC522_DELAY(); RC522_SCK_1(); // delay_ms ( 3 ); RC522_DELAY(); byte <<= 1; } } /* * º¯ÊýÃû£ºSPI_RC522_ReadByte * ÃèÊö £º´ÓRC522·¢ËÍ1 Byte Êý¾Ý * ÊäÈë £ºÎÞ * ·µ»Ø : RC522·µ»ØµÄÊý¾Ý * µ÷Óà £ºÄÚ²¿µ÷Óà */ u8 SPI_RC522_ReadByte ( void ) { u8 counter; u8 SPI_Data; for(counter=0;counter<8;counter++) { SPI_Data <<= 1; RC522_SCK_0 (); // delay_ms ( 3 ); RC522_DELAY(); if ( RC522_MISO_GET() == 1) SPI_Data |= 0x01; // delay_ms ( 2 ); // delay_ms ( 3 ); RC522_DELAY(); RC522_SCK_1 (); // delay_ms ( 3 ); RC522_DELAY(); } // printf("****%c****",SPI_Data); return SPI_Data; } /* * º¯ÊýÃû£ºReadRawRC * ÃèÊö £º¶ÁRC522&frac14;Ä´æÆ÷ * ÊäÈë £ºucAddress£¬&frac14;Ä´æÆ÷µØÖ· * ·µ»Ø : &frac14;Ä´æÆ÷µÄµ±Ç°Öµ * µ÷Óà £ºÄÚ²¿µ÷Óà */ u8 ReadRawRC(u8 ucAddress ) { u8 ucAddr, ucReturn; ucAddr =((ucAddress << 1 ) & 0x7E ) | 0x80; RC522_CS_Enable(); SPI_RC522_SendByte(ucAddr); ucReturn = SPI_RC522_ReadByte (); RC522_CS_Disable(); return ucReturn; } /* * º¯ÊýÃû£ºWriteRawRC * ÃèÊö £ºÐ´RC522&frac14;Ä´æÆ÷ * ÊäÈë £ºucAddress£¬&frac14;Ä´æÆ÷µØÖ· * ucValue£¬Ð´Èë&frac14;Ä´æÆ÷µÄÖµ * ·µ»Ø : ÎÞ * µ÷Óà £ºÄÚ²¿µ÷Óà */ void WriteRawRC ( u8 ucAddress, u8 ucValue ) { u8 ucAddr; ucAddr = ( ucAddress << 1 ) & 0x7E; RC522_CS_Enable(); SPI_RC522_SendByte ( ucAddr ); SPI_RC522_SendByte ( ucValue ); RC522_CS_Disable(); } /* * º¯ÊýÃû£ºSetBitMask * ÃèÊö £º¶ÔRC522&frac14;Ä´æÆ÷ÖÃλ * ÊäÈë £ºucReg£¬&frac14;Ä´æÆ÷µØÖ· * ucMask£¬ÖÃλֵ * ·µ»Ø : ÎÞ * µ÷Óà £ºÄÚ²¿µ÷Óà */ void SetBitMask ( u8 ucReg, u8 ucMask ) { u8 ucTemp; ucTemp = ReadRawRC ( ucReg ); WriteRawRC ( ucReg, ucTemp | ucMask ); // set bit mask } /* * º¯ÊýÃû£ºClearBitMask * ÃèÊö £º¶ÔRC522&frac14;Ä´æÆ÷Çåλ * ÊäÈë £ºucReg£¬&frac14;Ä´æÆ÷µØÖ· * ucMask£¬Çåλֵ * ·µ»Ø : ÎÞ * µ÷Óà £ºÄÚ²¿µ÷Óà */ void ClearBitMask ( u8 ucReg, u8 ucMask ) { u8 ucTemp; ucTemp = ReadRawRC ( ucReg ); WriteRawRC ( ucReg, ucTemp & ( ~ ucMask) ); // clear bit mask } /* * º¯ÊýÃû£ºPcdAntennaOn * ÃèÊö £º¿ªÆôÌìÏß * ÊäÈë £ºÎÞ * ·µ»Ø : ÎÞ * µ÷Óà £ºÄÚ²¿µ÷Óà */ void PcdAntennaOn ( void ) { u8 uc; uc = ReadRawRC ( TxControlReg ); if ( ! ( uc & 0x03 ) ) SetBitMask(TxControlReg, 0x03); } /* * º¯ÊýÃû£ºPcdAntennaOff * ÃèÊö £º&sup1;رÕÌìÏß * ÊäÈë £ºÎÞ * ·µ»Ø : ÎÞ * µ÷Óà £ºÄÚ²¿µ÷Óà */ void PcdAntennaOff ( void ) { ClearBitMask ( TxControlReg, 0x03 ); } /* * º¯ÊýÃû£ºPcdRese * ÃèÊö £º¸´Î»RC522 * ÊäÈë £ºÎÞ * ·µ»Ø : ÎÞ * µ÷Óà £ºÍⲿµ÷Óà */ void PcdReset ( void ) { RC522_Reset_Disable(); rt_thread_mdelay(1); RC522_Reset_Enable(); rt_thread_mdelay(1); RC522_Reset_Disable(); rt_thread_mdelay(1); WriteRawRC(CommandReg,0x0f ); while(ReadRawRC(CommandReg)&0x10); rt_thread_mdelay(1); WriteRawRC ( ModeReg, 0x3D ); //¶¨Òå·¢ËͺÍ&frac12;ÓÊÕ³£ÓÃÄ£Ê&frac12; ºÍMifare¿¨Í¨Ñ¶£¬CRC³õÊ&frac14;Öµ0x6363 WriteRawRC ( TReloadRegL, 30 ); //16λ¶¨Ê±Æ÷µÍλ WriteRawRC ( TReloadRegH, 0 ); //16λ¶¨Ê±Æ÷¸ßλ WriteRawRC ( TModeReg, 0x8D ); //¶¨ÒåÄÚ²¿¶¨Ê±Æ÷µÄÉèÖà WriteRawRC ( TPrescalerReg, 0x3E ); //ÉèÖö¨Ê±Æ÷·ÖƵϵÊý WriteRawRC ( TxAutoReg, 0x40 ); //µ÷ÖÆ·¢ËÍÐźÅΪ100%ASK } /* * º¯ÊýÃû£ºM500PcdConfigISOType * ÃèÊö £ºÉèÖÃRC522µÄ&sup1;¤×÷·&frac12;Ê&frac12; * ÊäÈë £ºucType£¬&sup1;¤×÷·&frac12;Ê&frac12; * ·µ»Ø : ÎÞ * µ÷Óà £ºÍⲿµ÷Óà */ void M500PcdConfigISOType ( u8 ucType ) { if ( ucType == 'A') //ISO14443_A { ClearBitMask ( Status2Reg, 0x08 ); WriteRawRC ( ModeReg, 0x3D );//3F WriteRawRC ( RxSelReg, 0x86 );//84 WriteRawRC( RFCfgReg, 0x7F ); //4F WriteRawRC( TReloadRegL, 30 );//tmoLength);// TReloadVal = 'h6a =tmoLength(dec) WriteRawRC ( TReloadRegH, 0 ); WriteRawRC ( TModeReg, 0x8D ); WriteRawRC ( TPrescalerReg, 0x3E ); rt_thread_mdelay( 2 ); PcdAntennaOn ();//¿ªÌìÏß } } /* * º¯ÊýÃû£ºPcdComMF522 * ÃèÊö £ºÍ¨&sup1;ýRC522ºÍISO14443¿¨Í¨Ñ¶ * ÊäÈë £ºucCommand£¬RC522ÃüÁî×Ö * pInData£¬Í¨&sup1;ýRC522·¢Ë͵&frac12;¿¨Æ¬µÄÊý¾Ý * ucInLenByte£¬·¢ËÍÊý¾ÝµÄ×Ö&frac12;Ú³¤¶È * pOutData£¬&frac12;ÓÊÕµ&frac12;µÄ¿¨Æ¬·µ»ØÊý¾Ý * pOutLenBit£¬·µ»ØÊý¾ÝµÄ볤¶È * ·µ»Ø : ״ֵ̬ * = MI_OK£¬³É&sup1;¦ * µ÷Óà £ºÄÚ²¿µ÷Óà */ char PcdComMF522 ( u8 ucCommand, u8 * pInData, u8 ucInLenByte, u8 * pOutData, u32 * pOutLenBit ) { char cStatus = MI_ERR; u8 ucIrqEn = 0x00; u8 ucWaitFor = 0x00; u8 ucLastBits; u8 ucN; u32 ul; switch ( ucCommand ) { case PCD_AUTHENT: //MifareÈÏÖ¤ ucIrqEn = 0x12; //ÔÊÐí´íÎóÖжÏÇëÇóErrIEn ÔÊÐí¿ÕÏÐÖжÏIdleIEn ucWaitFor = 0x10; //ÈÏ֤Ѱ¿¨µÈ´ýʱºò ²éѯ¿ÕÏÐÖжϱê־λ break; case PCD_TRANSCEIVE: //&frac12;ÓÊÕ·¢ËÍ ·¢ËÍ&frac12;ÓÊÕ ucIrqEn = 0x77; //ÔÊÐíTxIEn RxIEn IdleIEn LoAlertIEn ErrIEn TimerIEn ucWaitFor = 0x30; //Ѱ¿¨µÈ´ýʱºò ²éѯ&frac12;ÓÊÕÖжϱê־λÓë ¿ÕÏÐÖжϱê־λ break; default: break; } WriteRawRC ( ComIEnReg, ucIrqEn | 0x80 ); //IRqInvÖÃλ&sup1;Ü&frac12;ÅIRQÓëStatus1RegµÄIRqλµÄÖµÏà·´ ClearBitMask ( ComIrqReg, 0x80 ); //Set1¸ÃλÇåÁãʱ£¬CommIRqRegµÄÆÁ±ÎλÇåÁã WriteRawRC ( CommandReg, PCD_IDLE ); //д¿ÕÏÐÃüÁî SetBitMask ( FIFOLevelReg, 0x80 ); //ÖÃλFlushBufferÇå³ýÄÚ²¿FIFOµÄ¶ÁºÍдָÕëÒÔ&frac14;°ErrRegµÄBufferOvfl±ê־λ±»Çå³ý for ( ul = 0; ul < ucInLenByte; ul ++ ) WriteRawRC ( FIFODataReg, pInData [ ul ] ); //дÊý¾Ý&frac12;øFIFOdata WriteRawRC ( CommandReg, ucCommand ); //дÃüÁî if ( ucCommand == PCD_TRANSCEIVE ) SetBitMask(BitFramingReg,0x80); //StartSendÖÃλÆô¶¯Êý¾Ý·¢ËÍ ¸ÃλÓëÊÕ·¢ÃüÁîÊ&sup1;ÓÃʱ²ÅÓÐЧ ul = 434;//¸ù¾ÝʱÖÓÆµÂʵ÷Õû£¬²Ù×÷M1¿¨×î´óµÈ´ýʱ&frac14;ä25ms,Ô­ÏÈΪ1000 do //ÈÏÖ¤ ÓëѰ¿¨µÈ´ýʱ&frac14;ä { ucN = ReadRawRC ( ComIrqReg ); //²éѯÊÂ&frac14;þÖÐ¶Ï ul --; } while ( ( ul != 0 ) && ( ! ( ucN & 0x01 ) ) && ( ! ( ucN & ucWaitFor ) ) ); //Í˳öÌõ&frac14;þi=0,¶¨Ê±Æ÷Öжϣ¬Óëд¿ÕÏÐÃüÁî ClearBitMask ( BitFramingReg, 0x80 ); //ÇåÀíÔÊÐíStartSendλ if ( ul != 0 ) { if ( ! (( ReadRawRC ( ErrorReg ) & 0x1B )) ) //¶Á´íÎó±êÖ¾&frac14;Ä´æÆ÷BufferOfI CollErr ParityErr ProtocolErr { cStatus = MI_OK; if ( ucN & ucIrqEn & 0x01 ) //ÊÇ·ñ·¢Éú¶¨Ê±Æ÷ÖÐ¶Ï cStatus = MI_NOTAGERR; if ( ucCommand == PCD_TRANSCEIVE ) { ucN = ReadRawRC ( FIFOLevelReg ); //¶ÁFIFOÖб£´æµÄ×Ö&frac12;ÚÊý ucLastBits = ReadRawRC ( ControlReg ) & 0x07; //×îºó&frac12;ÓÊÕµ&frac12;µÃ×Ö&frac12;ÚµÄÓÐЧλÊý if ( ucLastBits ) * pOutLenBit = ( ucN - 1 ) * 8 + ucLastBits; //N¸ö×Ö&frac12;ÚÊý&frac14;õÈ¥1£¨×îºóÒ»¸ö×Ö&frac12;Ú£©+×îºóһλµÄλÊý ¶ÁÈ¡µ&frac12;µÄÊý¾Ý×ÜλÊý else * pOutLenBit = ucN * 8; //×îºó&frac12;ÓÊÕµ&frac12;µÄ×Ö&frac12;ÚÕû¸ö×Ö&frac12;ÚÓÐЧ if ( ucN == 0 ) ucN = 1; if ( ucN > MAXRLEN ) ucN = MAXRLEN; for ( ul = 0; ul < ucN; ul ++ ) pOutData [ ul ] = ReadRawRC ( FIFODataReg ); } } else cStatus = MI_ERR; // printf(ErrorReg); } SetBitMask ( ControlReg, 0x80 ); // stop timer now WriteRawRC ( CommandReg, PCD_IDLE ); return cStatus; } /* * º¯ÊýÃû£ºPcdRequest * ÃèÊö £ºÑ°¿¨ * ÊäÈë £ºucReq_code£¬Ñ°¿¨·&frac12;Ê&frac12; * = 0x52£¬Ñ°¸ÐÓ¦ÇøÄÚËùÓзûºÏ14443A±ê×&frac14;µÄ¿¨ * = 0x26£¬Ñ°Î´&frac12;øÈëÐÝÃß״̬µÄ¿¨ * pTagType£¬¿¨Æ¬ÀàÐÍ´úÂë * = 0x4400£¬Mifare_UltraLight * = 0x0400£¬Mifare_One(S50) * = 0x0200£¬Mifare_One(S70) * = 0x0800£¬Mifare_Pro(X)) * = 0x4403£¬Mifare_DESFire * ·µ»Ø : ״ֵ̬ * = MI_OK£¬³É&sup1;¦ * µ÷Óà £ºÍⲿµ÷Óà */ char PcdRequest ( u8 ucReq_code, u8 * pTagType ) { char cStatus; u8 ucComMF522Buf [ MAXRLEN ]; u32 ulLen; ClearBitMask ( Status2Reg, 0x08 ); //ÇåÀíָʾMIFARECyptolµ¥Ôª&frac12;ÓͨÒÔ&frac14;°ËùÓп¨µÄÊý¾ÝͨÐű»&frac14;ÓÃܵÄÇé¿ö WriteRawRC ( BitFramingReg, 0x07 ); // ·¢Ë͵Ä×îºóÒ»¸ö×Ö&frac12;ÚµÄ Æßλ SetBitMask ( TxControlReg, 0x03 ); //TX1,TX2&sup1;Ü&frac12;ŵÄÊä³öÐźŴ«µÝ¾­·¢Ë͵÷ÖÆµÄ13.56µÄÄÜÁ¿Ôز¨ÐźŠucComMF522Buf [ 0 ] = ucReq_code; //´æÈë ¿¨Æ¬ÃüÁî×Ö cStatus = PcdComMF522 ( PCD_TRANSCEIVE, ucComMF522Buf, 1, ucComMF522Buf, & ulLen ); //Ѱ¿¨ if ( ( cStatus == MI_OK ) && ( ulLen == 0x10 ) ) //Ѱ¿¨³É&sup1;¦·µ»Ø¿¨ÀàÐÍ { * pTagType = ucComMF522Buf [ 0 ]; * ( pTagType + 1 ) = ucComMF522Buf [ 1 ]; } else cStatus = MI_ERR; return cStatus; } /* * º¯ÊýÃû£ºPcdAnticoll * ÃèÊö £º·À³åײ * ÊäÈë £ºpSnr£¬¿¨Æ¬ÐòÁкţ¬4×Ö&frac12;Ú * ·µ»Ø : ״ֵ̬ * = MI_OK£¬³É&sup1;¦ * µ÷Óà £ºÍⲿµ÷Óà */ char PcdAnticoll ( u8 * pSnr ) { char cStatus; u8 uc, ucSnr_check = 0; u8 ucComMF522Buf [ MAXRLEN ]; u32 ulLen; ClearBitMask ( Status2Reg, 0x08 ); //ÇåMFCryptol Onλ Ö»ÓгÉ&sup1;¦Ö´ÐÐMFAuthentÃüÁîºó£¬¸Ãλ²ÅÄÜÖÃλ WriteRawRC ( BitFramingReg, 0x00); //ÇåÀí&frac14;Ä´æÆ÷ Í£Ö&sup1;ÊÕ·¢ ClearBitMask ( CollReg, 0x80 ); //ÇåValuesAfterCollËùÓÐ&frac12;ÓÊÕµÄλÔÚ³åÍ»ºó±»Çå³ý ucComMF522Buf [ 0 ] = 0x93; //¿¨Æ¬·À³åÍ»ÃüÁî ucComMF522Buf [ 1 ] = 0x20; cStatus = PcdComMF522 ( PCD_TRANSCEIVE, ucComMF522Buf, 2, ucComMF522Buf, & ulLen);//Ó뿨ƬͨÐÅ if ( cStatus == MI_OK) //ͨÐųÉ&sup1;¦ { for ( uc = 0; uc < 4; uc ++ ) { * ( pSnr + uc ) = ucComMF522Buf [ uc ]; //¶Á³öUID ucSnr_check ^= ucComMF522Buf [ uc ]; } if ( ucSnr_check != ucComMF522Buf [ uc ] ) cStatus = MI_ERR; } SetBitMask ( CollReg, 0x80 ); return cStatus; } /* * º¯ÊýÃû£ºCalulateCRC * ÃèÊö £ºÓÃRC522&frac14;ÆËãCRC16 * ÊäÈë £ºpIndata£¬&frac14;ÆËãCRC16µÄÊý×é * ucLen£¬&frac14;ÆËãCRC16µÄÊý×é×Ö&frac12;Ú³¤¶È * pOutData£¬´æ·Å&frac14;ÆËã&frac12;á&sup1;û´æ·ÅµÄÊ×µØÖ· * ·µ»Ø : ÎÞ * µ÷Óà £ºÄÚ²¿µ÷Óà */ void CalulateCRC ( u8 * pIndata, u8 ucLen, u8 * pOutData ) { u8 uc, ucN; ClearBitMask(DivIrqReg,0x04); WriteRawRC(CommandReg,PCD_IDLE); SetBitMask(FIFOLevelReg,0x80); for ( uc = 0; uc < ucLen; uc ++) WriteRawRC ( FIFODataReg, * ( pIndata + uc ) ); WriteRawRC ( CommandReg, PCD_CALCCRC ); uc = 0xFF; do { ucN = ReadRawRC ( DivIrqReg ); uc --; } while ( ( uc != 0 ) && ! ( ucN & 0x04 ) ); pOutData [ 0 ] = ReadRawRC ( CRCResultRegL ); pOutData [ 1 ] = ReadRawRC ( CRCResultRegM ); } /* * º¯ÊýÃû£ºPcdSelect * ÃèÊö £ºÑ¡¶¨¿¨Æ¬ * ÊäÈë £ºpSnr£¬¿¨Æ¬ÐòÁкţ¬4×Ö&frac12;Ú * ·µ»Ø : ״ֵ̬ * = MI_OK£¬³É&sup1;¦ * µ÷Óà £ºÍⲿµ÷Óà */ char PcdSelect ( u8 * pSnr ) { char ucN; u8 uc; u8 ucComMF522Buf [ MAXRLEN ]; u32 ulLen; ucComMF522Buf [ 0 ] = PICC_ANTICOLL1; ucComMF522Buf [ 1 ] = 0x70; ucComMF522Buf [ 6 ] = 0; for ( uc = 0; uc < 4; uc ++ ) { ucComMF522Buf [ uc + 2 ] = * ( pSnr + uc ); ucComMF522Buf [ 6 ] ^= * ( pSnr + uc ); } CalulateCRC ( ucComMF522Buf, 7, & ucComMF522Buf [ 7 ] ); ClearBitMask ( Status2Reg, 0x08 ); ucN = PcdComMF522 ( PCD_TRANSCEIVE, ucComMF522Buf, 9, ucComMF522Buf, & ulLen ); if ( ( ucN == MI_OK ) && ( ulLen == 0x18 ) ) ucN = MI_OK; else ucN = MI_ERR; return ucN; } /* * º¯ÊýÃû£ºPcdAuthState * ÃèÊö £ºÑéÖ¤¿¨Æ¬ÃÜÂë * ÊäÈë £ºucAuth_mode£¬ÃÜÂëÑé֤ģÊ&frac12; * = 0x60£¬ÑéÖ¤AÃÜÔ¿ * = 0x61£¬ÑéÖ¤BÃÜÔ¿ * u8 ucAddr£¬¿éµØÖ· * pKey£¬ÃÜÂë * pSnr£¬¿¨Æ¬ÐòÁкţ¬4×Ö&frac12;Ú * ·µ»Ø : ״ֵ̬ * = MI_OK£¬³É&sup1;¦ * µ÷Óà £ºÍⲿµ÷Óà */ char PcdAuthState ( u8 ucAuth_mode, u8 ucAddr, u8 * pKey, u8 * pSnr ) { char cStatus; u8 uc, ucComMF522Buf [ MAXRLEN ]; u32 ulLen; ucComMF522Buf [ 0 ] = ucAuth_mode; ucComMF522Buf [ 1 ] = ucAddr; for ( uc = 0; uc < 6; uc ++ ) ucComMF522Buf [ uc + 2 ] = * ( pKey + uc ); for ( uc = 0; uc < 6; uc ++ ) ucComMF522Buf [ uc + 8 ] = * ( pSnr + uc ); cStatus = PcdComMF522 ( PCD_AUTHENT, ucComMF522Buf, 12, ucComMF522Buf, & ulLen ); if ( ( cStatus != MI_OK ) || ( ! ( ReadRawRC ( Status2Reg ) & 0x08 ) ) ) { // if(cStatus != MI_OK) // printf("666") ; // else // printf("888"); cStatus = MI_ERR; } return cStatus; } /* * º¯ÊýÃû£ºPcdWrite * ÃèÊö £ºÐ´Êý¾Ýµ&frac12;M1¿¨Ò»¿é * ÊäÈë £ºu8 ucAddr£¬¿éµØÖ· * pData£¬Ð´ÈëµÄÊý¾Ý£¬16×Ö&frac12;Ú * ·µ»Ø : ״ֵ̬ * = MI_OK£¬³É&sup1;¦ * µ÷Óà £ºÍⲿµ÷Óà */ char PcdWrite ( u8 ucAddr, u8 * pData ) { char cStatus; u8 uc, ucComMF522Buf [ MAXRLEN ]; u32 ulLen; ucComMF522Buf [ 0 ] = PICC_WRITE; ucComMF522Buf [ 1 ] = ucAddr; CalulateCRC ( ucComMF522Buf, 2, & ucComMF522Buf [ 2 ] ); cStatus = PcdComMF522 ( PCD_TRANSCEIVE, ucComMF522Buf, 4, ucComMF522Buf, & ulLen ); if ( ( cStatus != MI_OK ) || ( ulLen != 4 ) || ( ( ucComMF522Buf [ 0 ] & 0x0F ) != 0x0A ) ) cStatus = MI_ERR; if ( cStatus == MI_OK ) { memcpy(ucComMF522Buf, pData, 16); for ( uc = 0; uc < 16; uc ++ ) ucComMF522Buf [ uc ] = * ( pData + uc ); CalulateCRC ( ucComMF522Buf, 16, & ucComMF522Buf [ 16 ] ); cStatus = PcdComMF522 ( PCD_TRANSCEIVE, ucComMF522Buf, 18, ucComMF522Buf, & ulLen ); if ( ( cStatus != MI_OK ) || ( ulLen != 4 ) || ( ( ucComMF522Buf [ 0 ] & 0x0F ) != 0x0A ) ) cStatus = MI_ERR; } if(cStatus==MI_OK) printf("card write is ok\r\n"); else if(cStatus==MI_ERR) printf("card write is not ok\r\n"); return cStatus; } /* * º¯ÊýÃû£ºPcdRead * ÃèÊö £º¶ÁÈ¡M1¿¨Ò»¿éÊý¾Ý * ÊäÈë £ºu8 ucAddr£¬¿éµØÖ· * pData£¬¶Á³öµÄÊý¾Ý£¬16×Ö&frac12;Ú * ·µ»Ø : ״ֵ̬ * = MI_OK£¬³É&sup1;¦ * µ÷Óà £ºÍⲿµ÷Óà */ char PcdRead ( u8 ucAddr, u8 * pData ) { char cStatus; u8 uc, ucComMF522Buf [ MAXRLEN ]; u32 ulLen; ucComMF522Buf [ 0 ] = PICC_READ; ucComMF522Buf [ 1 ] = ucAddr; CalulateCRC ( ucComMF522Buf, 2, & ucComMF522Buf [ 2 ] ); cStatus = PcdComMF522 ( PCD_TRANSCEIVE, ucComMF522Buf, 4, ucComMF522Buf, & ulLen ); if ( ( cStatus == MI_OK ) && ( ulLen == 0x90 ) ) { for ( uc = 0; uc < 16; uc ++ ) * ( pData + uc ) = ucComMF522Buf [ uc ]; } else cStatus = MI_ERR; if(cStatus==MI_OK) printf("card read is ok\r\n"); else if(cStatus==MI_ERR) printf("card read is not ok\r\n"); return cStatus; } /* * º¯ÊýÃû£ºPcdHalt * ÃèÊö £ºÃüÁƬ&frac12;øÈëÐÝÃß״̬ * ÊäÈë £ºÎÞ * ·µ»Ø : ״ֵ̬ * = MI_OK£¬³É&sup1;¦ * µ÷Óà £ºÍⲿµ÷Óà */ char PcdHalt( void ) { u8 ucComMF522Buf [ MAXRLEN ]; u32 ulLen; ucComMF522Buf [ 0 ] = PICC_HALT; ucComMF522Buf [ 1 ] = 0; CalulateCRC ( ucComMF522Buf, 2, & ucComMF522Buf [ 2 ] ); PcdComMF522 ( PCD_TRANSCEIVE, ucComMF522Buf, 4, ucComMF522Buf, & ulLen ); return MI_OK; } void IC_CMT ( u8 ucAddr, u8 * UID, u8 * KEY, u8 RW, u8 * Dat ) { u8 ucArray_ID [ 4 ] = { 0 }; //ÏÈºó´æ·ÅIC¿¨µÄÀàÐͺÍUID(IC¿¨ÐòÁкÅ) PcdRequest ( 0x52, ucArray_ID );//Ѱ¿¨ PcdAnticoll ( ucArray_ID );//·À³åײ PcdSelect ( UID );//Ñ¡¶¨¿¨ PcdAuthState ( 0x60, ucAddr, KEY, UID );//УÑé if ( RW )//¶ÁдѡÔñ£¬1ÊǶÁ£¬0ÊÇд PcdRead ( ucAddr, Dat ); else PcdWrite ( ucAddr, Dat ); PcdHalt (); } void ShowID(u16 x,u16 y, u8 *p, u16 charColor, u16 bkColor) //ÏÔʾ¿¨µÄ¿¨ºÅ£¬ÒÔÊ®Áù&frac12;øÖÆÏÔʾ { // u8 num[9]; // u8 i; ///* for(i=0;i<4;i++) // { // num[i*2]=p[i]/16; // num[i*2]>9?(num[i*2]+='7'):(num[i*2]+='0'); // num[i*2+1]=p[i]%16; // num[i*2+1]>9?(num[i*2+1]+='7'):(num[i*2+1]+='0'); // } // num[8]=0; // // LCD_ShowString(6,110,110,16,16,num); */ // printf("ID>>>%s\r\n", num); } #define RC522_DELAY() rt_thread_delay_us( 100 ) extern void clean_BUF(u8 *BUF,int BUF_length); int card_count=0,card_number=0; extern int book_number,human_number; extern uint32_t Librarian; extern struct Book Library_book[5]; extern struct Human Library_Human; extern int rc522_flag; int borrow_flag=0; int user_flag=0; int book_flag=0; int human_flag=0; //RC522_state 0Ôò²»Êä³öÐÅÏ¢£¬1ÔòÊä³öÐÅÏ¢ void RC522_Handel(int RC522_state)//RC522´¦Àíº¯Êý { u32 card_number_D=0; //¿¨ºÅ status = PcdRequest(PICC_REQALL,CT);//Ѱ¿¨ if(status==MI_OK)//Ѱ¿¨³É&sup1;¦ { if(RC522_state==1) printf("card search is ok\r\n"); status=MI_ERR; status = PcdAnticoll(SN);//·À³åײ } if (status==MI_OK)//·À³åײ³É&sup1;¦ { status=MI_ERR; if(RC522_state==1) printf("card_number_0>>>>>>%d\r\n", SN[0]); if(RC522_state==1) printf("card_number_1>>>>>>%d\r\n", SN[1]); if(RC522_state==1) printf("card_number_2>>>>>>%d\r\n", SN[2]); if(RC522_state==1) printf("card_number_3>>>>>>%d\r\n", SN[3]); if(RC522_state==1) card_number_D=(SN[2]<<16)+(SN[1]<<8)+(SN[0]); //»ñȡӡˢ¿¨ºÅ if(RC522_state==1) printf("the card number is :[%d]\r\n",card_number_D); { if(card_number_D==10597107) { Library_book[book_number].book_ID=card_number_D; book_number++; for(int i=0;i<card_number_max;i++) { if(Library_book[i].book_ID==card_number_D)//ÒѾ­&frac12;è&sup1;ýÊé { printf("%d»&sup1;Êé%d\r\n",Library_Human[0].human_ID,Library_Human[0].borrow_ID); Library_book[0].status=0;//Êé&sup1;é»&sup1; u2_printf("card:[%d]00\r\n",Library_Human[0].borrow_ID); Library_Human[0].borrow_ID=0; break; } else { Library_Human[0].borrow_ID=Library_book[0].book_ID;//Õâ¸öÈË&frac12;èÁËÄı¾Êé printf("&frac12;èÔÄÕß%d&frac12;è×ß%d\r\n",Library_Human[0].human_ID,Library_Human[0].borrow_ID); Library_book[0].status=1;//Êé±»&frac12;è³ö£¬×´Ì¬¸Ä±ä //Library_book[book_number].book_ID=card_number_D;//±»&frac12;èÊéµÄID u2_printf("card:[%d]01",card_number_D); } } Library_book[0].book_ID=card_number_D; if(Library_book[0].status==0)//ûÓÐ&frac12;è&sup1;ýÊé { Library_Human.borrow_ID=Library_book[0].book_ID;//Õâ¸öÈË&frac12;èÁËÄı¾Êé printf("&frac12;èÔÄÕß%d&frac12;è×ß%d\r\n",Library_Human.human_ID,Library_Human.borrow_ID); Library_book[0].status=1;//Êé±»&frac12;è³ö£¬×´Ì¬¸Ä±ä //Library_book[book_number].book_ID=card_number_D;//±»&frac12;èÊéµÄID u2_printf("card:[%d]01",card_number_D); } else//ÒѾ­&frac12;è&sup1;ýÊé { printf("%d»&sup1;Êé%d\r\n",Library_Human.human_ID,Library_Human.borrow_ID); Library_book[0].status=0;//Êé&sup1;é»&sup1; u2_printf("card:[%d]00\r\n",Library_Human.borrow_ID); Library_Human.borrow_ID=0; } } else if(card_number_D==16072339) { printf("·Ç·¨ÈËÔ±\r\n"); } else { printf("card number is : [%d]\r\n\r\n",card_number_D); Librarian=card_number_D; Library_Human.human_ID=card_number_D;//&frac12;èÊéÈ˵ÄID rc522_flag=1; } } //sprintf(Librarian,"%d",card_number_D); // ShowID(0,200,SN,BLUE,WHITE); //ÔÚÒº¾§ÆÁÉÏÏÔʾ¿¨µÄIDºÅ for(card_count=0;card_count<card_number_max;card_count++) //ÔÚËùÓб£´æ¿¨ºÅµÄÊý×éÖÐѰÕÒÊÇ·ñÓÐÒÑ´æÈ뿨ºÅ¿âµÄ¿¨ { if(strcmp((char *)card_human[card_count],(char *)SN)==0) { // card_bit[card_count]='1'; user_flag=1; human_flag=1; book_flag=1; break; } else { book_flag=0; } } if(user_flag==1) { rc522_flag=1; printf("Óû§%dÈÏÖ¤³É&sup1;¦£¬Çë&frac12;øÈë\r\n",card_number_D); Library_book[card_count].human_ID=card_number_D; printf("µÚ%d¸öÈË&frac12;èÊé\r\n",card_count); u2_printf("human:[%d]1\r\n",Library_book[card_count].human_ID);//&frac12;èÊéµÄÈË user_flag=0; } else { if(human_flag==1) { for(card_count=0;card_count<card_number_max;card_count++) //ÔÚËùÓб£´æ¿¨ºÅµÄÊý×éÖÐѰÕÒÊÇ·ñÓÐÒÑ´æÈ뿨ºÅ¿âµÄ¿¨ { if(strcmp((char *)card_book[card_count],(char *)SN)==0) { if(Library_book[card_count].status==0)//ÊéÔÚ¿âÖпÉÒÔ±»&frac12;è³ö { Library_book[card_count].book_ID=card_number_D;//±»&frac12;è³öÊéµÄID Library_book[card_count].status=1;//ÖÃΪ1£¬Êé±»&frac12;è³ö printf("%d°ÑÊé&frac14;®%d&frac12;è³ö\r\n",Library_book[card_count].human_ID,Library_book[card_count].book_ID); u2_printf("card:[%d]01",Library_book[card_count].book_ID); book_flag=1; break; } else { printf("%d°ÑÊé&frac14;®%d»&sup1;»Ø\r\n",Library_book[card_count].human_ID,Library_book[card_count].book_ID); u2_printf("card:[%d]00",Library_book[card_count].book_ID); Library_book[card_count].book_ID=0;//Êé±»»&sup1;»Ø£¬ÖÃΪ0 Library_book[card_count].status=0;//ÖÃΪ0£¬Êé±»»&sup1;»Ø book_flag=1; break; } } else { book_flag=0; } } user_flag=0; } else { printf("´íÎó²Ù×÷£¬ÎÞ·¨&frac12;èÊé\r\n"); book_flag=1; } if(book_flag==0) { printf("δÈë¿âÈËÔ±ÎÞ·¨&frac12;øÈë\r\n"); } // if(card_count==card_number_max)//¿¨¿âÖÐÕÒ²»µ&frac12;¶ÔÓ¦¿¨ºÅʱ // { // if(card_number<card_number_max) //¿¨¿âÓпÕÓàλÖÃ&frac12;øÈë´Ë´¦£¬²¢±£´æÐ¿¨Èë¿â // { // strcpy((char *)card_book[card_number],(char *)SN); //¿¨Æ¬Êý¾ÝÈë¿â // if(RC522_state==1) printf("ÊéÈë¿â[%d]\r\n",card_number); // card_number++; // } // else // { // if(RC522_state==1) printf("¿¨¿âÒѾ­ÂúÁË\r\n"); //¿¨¿âÒѾ­ÂúÁË // } // } // else //¿¨¿âÖÐÓжÔÓ¦¿¨ºÅʱ // { // if(strchr(card_bit,'1')!=NULL)//µ±ÖÁÉÙÓÐÒ»ÕÅÒѱ»Â&frac14;ÈëµÄ¿¨Ë¢ÉÏʱ // { // LED0=0; // // BEEP=1; // rt_thread_mdelay(100); // LED0=1; // BEEP=0; //clean_BUF((u8 *)card_bit,card_number_max); memset(card_bit,0,sizeof(card_bit)); // } //} //total=card1_bit+card2_bit+card3_bit+card4_bit+lxl_bit; status =PcdSelect(SN); } } if(status==MI_OK)//Ñ¡¿¨³É&sup1;¦ { status=MI_ERR; status =PcdAuthState(0x60,0x09,KEY,SN); } if(status==MI_OK)//ÑéÖ¤³É&sup1;¦ { status=MI_ERR; status=PcdRead(s,RFID); } if(status==MI_OK)//¶Á¿¨³É&sup1;¦ { status=MI_ERR; rt_thread_mdelay(100); } //PcdReset(); } 每一部分是干什么的哪些是重复的
最新发布
12-16
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值