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
main.c文件代码: #include "sys.h" #include "delay.h" #include "usart.h" #include "led.h" #include "lcd.h" #include "adc.h" //ALIENTEK Ì&frac12;Ë÷ÕßSTM32F407¿ª·¢°å ʵÑé18 //ADCÄ£Êýת»»ÊµÑé-¿âº¯Êý°æ±¾ //&frac14;&frac14;ÊõÖ§³Ö£ºwww.openedv.com //ÌÔ±¦µêÆÌ£ºhttp://eboard.taobao.com //&sup1;ãÖÝÊÐÐÇÒíµç×Ó¿Æ&frac14;&frac14;ÓÐÏÞ&sup1;«Ë¾ //×÷ÕߣºÕýµãÔ­×Ó @ALIENTEK int main(void) { u16 adcx; float temp; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//ÉèÖÃϵͳÖжÏÓÅÏÈ&frac14;¶·Ö×é2 delay_init(168); //³õÊ&frac14;»¯ÑÓʱº¯Êý uart_init(115200); //³õÊ&frac14;»¯´®¿Ú²¨ÌØÂÊΪ115200 LED_Init(); //³õÊ&frac14;»¯LED LCD_Init(); //³õÊ&frac14;»¯LCD&frac12;Ó¿Ú Adc_Init(); //³õÊ&frac14;»¯ADC POINT_COLOR=RED; LCD_ShowString(30,50,200,16,16,"Explorer STM32F4"); LCD_ShowString(30,70,200,16,16,"ADC TEST"); LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK"); LCD_ShowString(30,110,200,16,16,"2014/5/6"); POINT_COLOR=BLUE;//ÉèÖÃ×ÖÌåΪÀ¶É« LCD_ShowString(30,130,200,16,16,"ADC1_CH5_VAL:"); LCD_ShowString(30,150,200,16,16,"ADC1_CH5_VOL:0.000V"); //ÏÈÔÚ&sup1;̶¨Î»ÖÃÏÔʾСÊýµã while(1) { adcx=Get_Adc_Average(ADC_Channel_5,20);//»ñȡͨµÀ5µÄת»»Öµ£¬20´ÎÈ¡Æ&frac12;¾ù LCD_ShowxNum(134,130,adcx,4,16,0); //ÏÔʾADCC²ÉÑùºóµÄÔ­Ê&frac14;Öµ temp=(float)adcx*(3.3/4096); //»ñÈ¡&frac14;ÆËãºóµÄ´øÐ¡ÊýµÄʵ&frac14;ʵçÑ&sup1;Öµ£¬±ÈÈç3.1111 adcx=temp; //¸³ÖµÕûÊý²¿·Ö¸øadcx±äÁ¿£¬ÒòΪadcxΪu16ÕûÐÎ LCD_ShowxNum(134,150,adcx,1,16,0); //ÏÔʾµçÑ&sup1;ÖµµÄÕûÊý²¿·Ö£¬3.1111µÄ»°£¬ÕâÀï¾ÍÊÇÏÔʾ3 temp-=adcx; //°ÑÒѾ­ÏÔʾµÄÕûÊý²¿·ÖÈ¥µô£¬ÁôÏÂСÊý²¿·Ö£¬±ÈÈç3.1111-3=0.1111 temp*=1000; //СÊý²¿·Ö³ËÒÔ1000£¬ÀýÈ磺0.1111¾Íת»»Îª111.1£¬Ï൱ÓÚ±£ÁôÈýλСÊý¡£ LCD_ShowxNum(150,150,temp,3,16,0X80); //ÏÔʾСÊý²¿·Ö£¨Ç°Ãæ×ª»»ÎªÁËÕûÐÎÏÔʾ£©£¬ÕâÀïÏÔʾµÄ¾ÍÊÇ111. LED0=!LED0; delay_ms(250); } } adc.c文件代码: #include "adc.h" #include "delay.h" ////////////////////////////////////////////////////////////////////////////////// //±¾³ÌÐòÖ»&sup1;©Ñ§Ï°Ê&sup1;Óã¬Î´¾­×÷ÕßÐí¿É£¬²»µÃÓÃÓÚÆäËüÈκÎÓÃ; //ALIENTEK STM32F407¿ª·¢°å //ADC Çý¶¯´úÂë //ÕýµãÔ­×Ó@ALIENTEK //&frac14;&frac14;ÊõÂÛ̳:www.openedv.com //´´&frac12;¨ÈÕÆÚ:2014/5/6 //°æ±¾£ºV1.0 //°æÈ¨ËùÓУ¬µÁ°æ±Ø¾¿¡£ //Copyright(C) &sup1;ãÖÝÊÐÐÇÒíµç×Ó¿Æ&frac14;&frac14;ÓÐÏÞ&sup1;«Ë¾ 2014-2024 //All rights reserved ////////////////////////////////////////////////////////////////////////////////// //³õÊ&frac14;»¯ADC void Adc_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; ADC_CommonInitTypeDef ADC_CommonInitStructure; ADC_InitTypeDef ADC_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//Ê&sup1;ÄÜGPIOAʱÖÓ RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); //Ê&sup1;ÄÜADC1ʱÖÓ //ÏȳõÊ&frac14;»¯ADC1ͨµÀ5 IO¿Ú GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;//PA5 ͨµÀ5 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;//Ä£ÄâÊäÈë GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;//²»´øÉÏÏÂÀ­ GPIO_Init(GPIOA, &GPIO_InitStructure);//³õÊ&frac14;»¯ RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,ENABLE); //ADC1¸´Î» RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,DISABLE); //¸´Î»&frac12;áÊø ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;//¶ÀÁ¢Ä£Ê&frac12; ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;//Á&frac12;¸ö²ÉÑù&frac12;×¶ÎÖ®&frac14;äµÄÑÓ³Ù5¸öʱÖÓ ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled; //DMAʧÄÜ ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div4;//Ô¤·ÖƵ4·ÖƵ¡£ADCCLK=PCLK2/4=84/4=21Mhz,ADCʱÖÓ×îºÃ²»Òª³¬&sup1;ý36Mhz ADC_CommonInit(&ADC_CommonInitStructure);//³õÊ&frac14;»¯ ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;//12λģÊ&frac12; ADC_InitStructure.ADC_ScanConvMode = DISABLE;//·ÇɨÃèÄ£Ê&frac12; ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;//&sup1;رÕÁ¬Ðø×ª»» ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;//&frac12;ûÖ&sup1;´¥·¢&frac14;ì²â£¬Ê&sup1;ÓÃÈí&frac14;þ´¥·¢ ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//ÓÒ¶ÔÆë ADC_InitStructure.ADC_NbrOfConversion = 1;//1¸öת»»ÔÚ&sup1;æÔòÐòÁÐÖÐ Ò²¾ÍÊÇֻת»»&sup1;æÔòÐòÁÐ1 ADC_Init(ADC1, &ADC_InitStructure);//ADC³õÊ&frac14;»¯ ADC_Cmd(ADC1, ENABLE);//¿ªÆôADת»»Æ÷ } //»ñµÃADCÖµ //ch: @ref ADC_channels //ͨµÀÖµ 0~16ȡֵ·¶Î§Îª£ºADC_Channel_0~ADC_Channel_16 //·µ»ØÖµ:ת»»&frac12;á&sup1;û u16 Get_Adc(u8 ch) { //ÉèÖÃÖ¸¶¨ADCµÄ&sup1;æÔò×éͨµÀ£¬Ò»¸öÐòÁУ¬²ÉÑùʱ&frac14;ä ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_480Cycles ); //ADC1,ADCͨµÀ,480¸öÖÜÆÚ,Ìá¸ß²ÉÑùʱ&frac14;ä¿ÉÒÔÌá¸ß¾«È·¶È ADC_SoftwareStartConv(ADC1); //Ê&sup1;ÄÜÖ¸¶¨µÄADC1µÄÈí&frac14;þת»»Æô¶¯&sup1;¦ÄÜ while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//µÈ´ýת»»&frac12;áÊø return ADC_GetConversionValue(ADC1); //·µ»Ø×î&frac12;üÒ»´ÎADC1&sup1;æÔò×éµÄת»»&frac12;á&sup1;û } //»ñȡͨµÀchµÄת»»Öµ£¬È¡times´Î,È»ºóÆ&frac12;¾ù //ch:ͨµÀ±àºÅ //times:»ñÈ¡´ÎÊý //·µ»ØÖµ:ͨµÀchµÄtimes´Îת»»&frac12;á&sup1;ûÆ&frac12;¾ùÖµ u16 Get_Adc_Average(u8 ch,u8 times) { u32 temp_val=0; u8 t; for(t=0;t<times;t++) { temp_val+=Get_Adc(ch); delay_ms(5); } return temp_val/times; } 以上是老师提供的有关ADC实验的示例keil代码,我想请你在这些代码的基础上进行修改完善来完成任务1、2、3,请分别给出两个文件中应该编译的代码
10-30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值