CW32的UART单线半双工模式
一、简介半双工即Half duplex Communication,是指在通信过程的任意时刻,信息既可由A传到B,又能由B传A,但同时只有一个方向上的传输存在。由于这种方式要频繁变换信道方向,故效率低,但可以节约传输线路。半双工方式适用于终端与终端之间的会话式通信。
二、实际操作(以CW32L083为例)
设置 UARTx_CR2.SIGNAL 为 1 使 UART 工作于单线半双工工作模式。在该模式下,使用 UARTx_TXD 引脚进行数据的发送和接收,不占用 UARTx_RXD 引脚(UARTx_RXD 可作通用 IO 使用)。写数据到 UARTx_TDR 寄存器后,UARTx_TXD 引脚立即进入发送状态,输出 UARTx_TDR 寄存器中的数据。数据 发送完成后,UARTx_TXD 引脚恢复到常态的接收状态。没有发送数据时,UARTx_TXD 引脚处于接收状态,数据接收完成后,接收完成标志位 UARTx_ISR.RC 会被硬件置 位,此时应尽快读取 UARTx_RDR 寄存器,并清除 UARTx_ISR.RC 标志位。
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAi8AAAAyCAYAAACUAzsoAAAgAElEQVR4Xu2ddUCVVxvAf3SHIIiIgihggS12d3f33Jw6c7azdTrbqbPmzNndih3YgdioYIMg3dz4nguYs77N9r77Z+p933POc+p3njo6J06cUE+ePBkXFxe0z9crgUePHpGYmEi2bNm+3kZqW8a9e/dQKpU4OztrpfEVS+D+/fuoVCqyZs36FbdS2zStBF6UgEKhICIigjFjxqBz8OBB9bZt26hdu7ZWTl+xBE6fPp26sdWvX/8rbqW2afv37yc6Opp69epphfEVS2D37t2pratatepX3Ept07QSeFEC8fHx7Ny5kz59+qDj4+OjvnDhQuoftM/XK4EtW7bg7+/P4MGDv95GalvGwoUL0WjZBgwYoJXGVyyB2bNnp7auS5cuX3ErtU3TSuBFCWgOZpMmTeK7777Twsu3Mji08PJt9LQWXr6NftbCy7fRz9pWauHlmx8DWnj5NoaAFl6+jX7Wwsu30c/aVmrh5ZsfA1p4+TaGgBZevo1+1sLLt9HP2lZq4eWbHwNaePk2hoAWXr6NftbCy7fRz9pWauHlmx8DWnj5NobAu8GLioi7d9HP7Iy5fppcFIkJqPWNMNTXfUFQyYlRJKQYYmlhgs47iFARdZ8IHTsyWhqm/j42KhSlnhWW5ml/ftWjVqUQGRmDiYUVRlK+Wq1GV/dZPdQSHqnU1yetqkpiw2MwzGCNYfoHE2MeozCwwsxY/6Uy1CRLegCVviHG+nqvKTuRyPAEzG0zYJD6PRWJMbEozSww0311jdUqJYlJKRgaGUl1EoiJU2JhZYHeuwjoHWT4Lj95J3hRJRMTr8Lc3Pid+k6lSCZBoSNyNHiXKny834i8U1Q6GDw3NtVqGRNKXfRfGq/PKqUgTvrF1Mzondr++saoSElRSTl66Oh86A5WEh0ehbG1DYYvTsM3yFqNMkWBSuaLgZ5mjKtJSUhAaWyK8fPVVatISk7BwNAQ3SftkFB7zXvvXNTLtZCxH59igKnMu9SZIykalDJ39WWuphWtIuHxY5Kt7LBKX2f+66DROuz+Vwl+ge9r4eUL7LR/UeU3wos6het+J1FkyMHdPydg3LELoZfCqFurOFd2/Y0iVyMKubwIKfdu+HDxjiOVK7hxdOE49t/TeWGxU+FIk4GdyGuYBhY3FvbjdMHRNCtglrqAndwyn5QcTSiZx/qlTUTJrSM+XLItQq2sClZv8KFI1YZkMQzFZ78/xarWwCGVrFSE+K5g7s28/NyqgABFEmdm/sK9KqOo66GpayI758/Cpno3imY1RpUcy92AK1y5coWr1wOJUttSsVVLimc2RaV+IlBZ6GUR15NVOyXuJhvX+VG+VUPsUvlGxYNDK1maVIF+VTK/cmFXRj5g91F/CpWtgn7UAfaeMKJ2w1KYfui97bnx8DZ4eXTrJNFqHbbvjKdFEwfuBuuT2/gC6x6Uo2V5m1e2SxF+lcVbAmnSpgaW/3JHU0bexT8wTLbQVz+6hhY4Z3fGylTNkXUrMCxQgwxX1rIlIPkF+FMpTfBq0JTKrhlICfRlWWAWOlR8krtIRdDuiexXNqRNDbd0qH2pPMUVJk28QZdBdTD7F/Mo7RWB39CrrD8RSWOZI/qvhReVAHUIDx5Fyeh5xWNojaurA6lT5A1PzMUlLD3vTtuWxUg6t4kVvvfS5agWoOcpPBmayXxs2IAc1tJJAnFXTh4m3NqNUh5OqXPQb9UK7tVqTS3z5wpThkmI8QW8y5cmg5mmJjLOd87jUOZWNMtv8UrAU8UFsnZXMPUblnhl3VXB61h5wotm9dzQTJ2YBzc4ej2UMqWLY6avmQwqwk8sYt61gvRoXRDTfzmmnheZFl7+9WD+cl/85PCiTsB32QLO5ahNt5IuTwX5cO9YNoTXo2uTfKmLheLhGQb3X0yxab/T2DZ9N1De5pcGDTgQk0EmkRJjW3eadulFizI6TGjZlT2hKhRxoUSoM2AnG56ubXn2rx/5bp2limbvvHGMW+lLckoyUfFJWJibo2eUgbY1inA0KCMjp/xIVjmWq1VRbBzWE1XzGZQKnESVkfuxs5RThnFGvOv8wE/tyuNgIuV/xE3s5Ua+CV40GoOQ07tYdteUrNtncbdmM5ysctCoQl52zJqMQ+PeFEzdwXXQk51dLSezW5c3cOamM/Xr5mNN/yHkHjWVIk92A3UcG4aMR+eXUdQxSCI+JohZ3aZTcuqv5LcwxdJEwdJff8WlRR88bWTlksXfxNQCI0MpI+URy2f+jX2DtpQxecy8Fbup1aYzOTIoObnuT/bolmBQo8Lpi2o8R3/ryKEcQ+lV3wP98K1MmB1NhwHNyRAwixGb3RjQrzrWBnpE3jvJpi3nsLK4wfYbtZgzsgL6CbtoVmwkirzZ0OgUEh/eoObEo3QqrCdalqss+es4tX5qQ8jC3kw7GCEnyEj8riThmc8BHbU+BTpOYUBlc85u301s4XKU1H/M8q3HqFC/Ocpzv7E7ogHt6uR8CgR6ejIGPvAgeCO8yCn7zsUjnLh2gn2+2WhR8BZJRbuQ98xklroOoHdhzeYlfayTzOHV01mx56ZoxzSDNoXg67fRyZmTTKkbjZycKcioOd3J8Y4n56Rbh1m8+yJh1y9yVT8jJV0zy7RO4JzPCTJULk/ODE5UqlwJFzsT4h76sWTrVWzP7sFk9CyqWz4ZzVL/3evZlbkcbbI+4K+R09gTL9/K50ndNm2wC1jIgFX6lMqbSJ4KTfHOYSfjVQfFtdX09MnPjJ880Es5RZfOfvz2VycsSWbrgMEYD5tE5f+DZFSKBPYvHsN8n9tYW8sG/8K81sOlTHO6NxFo1Ytl+7yZHA6DTKLlCrvsT6BNVoo6ZJC2R3HsrB7jF/1C9lcr/1LXPVXCFUb8sJzG88bgaSjawEjR/j0hwKS9jJ+mQ98BFZ+CmqGxOeZmolFTxrB9zVIMncqTN6c1xuZWXFowi5sd+tPe6ok8RTuTdJclS32p3rAOiZdWMWv5SeIUD/C/ZkCe3HboG+ehy8QeUvazFUUVdY4xc25I2oUmiI7x2SMkpUmQqLjzB1N3lqT3917CTCqUEbdYvuMCVSVnnL2si7p6BujrKTg4uQ8R1cdRP+/LMny3JVoLL/+/nL6qNz4HeNk3ZyrHPZoyuGLOp7K9t70fyx61YGD7QjKHVQQc3MAGn42csuzL3/3zp5kGlIGM7zGdKqOnUFg2wcjAI4yfvI0qAwdSyUkzQ1UEzmvLwJRhLO/mnnoK+DdP/O0zjF96lM7du5DFSrY5AZuDk/qwwa4H49rlJmz3JIYf9WTSiJokru1Du6Af2DkgNymRdzi4chZbb7vQve93uNn+V1X1v6l92jtvgpeUhLvsWrmJK/dusW3hRqyqNaVsHncKV83N9qEzsClfFqMHV0h0rUKr+sV5eGQfvldPcDvEllJy0otaMhJVwy54GMs2J+YYXSMdTv3tQ97pE/A6vY5JO87i4ZQFZdhN/E0rMbXqTQbNCSVnHvvUjf3Bg+t4VepJ88o5ibp5iN9mbqFghcoYxNxkz/EgKtSsSgbpcHVSODeDIU/RUhT3dEwFDmVyGP7nbqGjCOWY/12SYsN5EJaIefwdYp28yemah+Z1S2Emna/QLKSB8+izzIPJQ8thkLyXvn0fMfKPdljrqrg4vRXHSyykjslxdp48g++B6xRp04UOVfJz7chWou28Ke5hx5WjGwg2K0K5AtlkTMWzZ/5iIqs1ob5ZdBq81K3J4aGNOWTfkIIO+iQ9us5jqxL80KIaWews/n0nvsObb4QX5X12r9jKGQGY5bvDqFClNEXKFiR69WJuFKuEU0QIiTb5aN+xEpd3bCFLvgpYGiTLseC5R8cAa1s1f/f8nVJzJlDg/7IkqQnav5Vd+q50LpNX5lEEqyYuIUvvnpRO3xzVCeFEKS2wFu3Azh5N2ZOnHvlkXKU9ahLD48hUszl1hZr2rdtMtKUTeb1cCTvjw3qhhHINKmAtm6XPsQCyF6omcO2N5fUltN9ahCUD8v4DXtZ1+QnjSfOo9a7wok7i0qYZohESrUmuTNiaiibxOXhJFrNhrhJVcNFoP1Qx7Fi+HovS1SnmaEXA9g0cdSpCey/RFCnvMXv8LuoO6/J6eBGN6LX1c1hm1YSRlR1Q395MZ9Ea5XUI53GiHjZOcvDbraZ4UVMixRSmZ2aLpW02OnZqhEnUNRb9voiULG4YhB8m0KAFlTnH3Q4D6Gj9RJ5JAt6LWLD1OvmLVaRqo/JEnT5KQg5vWU9lXB84j1fpimSxfgFReD28JBF0zhff48vZ7peXH9rkI/DKDWKTxHwlRcoMRq1nRsGy1Smex5HowH2sPxhHo9a1yZBmm/3Xj1bz8q9F9+W++CXAi1ohJoAVc9DN7sGucdtpvWo6hcxlcXgJXlDKyXfUNOJa9uB72WT+CS8JnFg8ndgS3ajobkF8wCa2Xssm5pGCmLxh7vwDXjSbZuQFJg/6g3xtWnFszWFqDe5HcdFOPFj1BF7ypMKSWhHH6mkjSCj0Pe0quL90Svt44+aNmheBwwTZYNcs28Dh7T7YN2qMY4bc1DGWE+saewaO60jguP4k9ZhFCzcLYoKDuXRlBxdvZ6G6bA4HhvdCt1kPcpskc0CSpNm1646HvjFupQqS5LudLQkOdKtamBQBk4m7r2Fw/BReI6dTNd0UdW7PbO4b1KRWOWcSIu5w4cJNUnQNCDwwFz+D6tQt7fwCeBraulEwh4ksjNd4FJuCo1t+spiJz0tiihzmA/ljwTFafd8UayNRC+gZYW1pRsiFLazaeYnYu7JgXstO40o5yORpyYWtpox6AV4W0cotgjv3L7J+1Vkqd2xCBvH7eRR0iUvRJpTIrcemJUcp0KgJOTJnIZez6T/gpaRHEgMGrabqkJnU9TTm3B+9CKwwg06l7TESLdCHfN5mNnp805eNO2Tc+2akYwN7OSknsv1vX4r+NoEs/j4Y5SpN2XxZCJeEhkYC6YcO+RH3BB3kNO93+iYVv++GW0oMNp55sPq/VP5vhxdVyEkWrT5FtnJyEJjXg105apDbSE1CaAgpGRyQgzvG2cvStrwD+/cdJd4/CMOuHXC6dILAB1EkqXWxc3LB1jyOa/76VGpcHHOBl9brPPijuwe6Kefp2+ciI2a0xlw0Slt/HoTNjAX/F7zcu3aLR/evsXjzdiwtRQv33NoRFSrm1n6/U8lVKirwsn3+THzD9XAQ37DQS37csnHGO7NoXlSRHDmtw7iFQ14PL8pHLP19A54dO1DAyhBV6FmWn9TFVecWwYmGZPOMY908NfXFDnQ/PBkjm2yYG6gpUqIQ9zeO5qh5W1pXcSViU09WG/Uj/+XpzIzPzoDvOlDQUWNaVRETeoklK05SsXYVoq4dlYSlV7msyiIHkTti5tOhUJG85CvXCO9szyhVAy9DBizGKqfTU42Pnmh4fmhaCN24KCJvzGfO3mL07FIC87tb8UmoRq2C5tLkffy11Zp2rQulHjxSIu+xRszCxeu2wdX2HVV4r5k8Wnj5kKvKZ/rtLwFeUuJD+HPqPEr/MADl7BrsLLGGAVVsRDX6ouYl7v5pho1bS7MhQyiWWXPCfVnzoib04jJmbFDRrW8V1nfsjN2otTTKKRqR/xNeNKfA28dm0KffbgqI2vmXKrnkG2IvfhleBAxOb5wlE9iTAS3KiUr+v50w/u0wehO8JMeKWWfkRGzrdcd82WjMR88he8gJ5vZdQ9bGufCuWJ2do9fRev4QcqbarCHw8npO3XCmQZ1cLOjQgshKLXExSOHksmVkaNwBNzkt2+StTK7IEy/Ci89dKpasLNy5F9tSTciV0YCz26bzMEMTapZ0fM7GHsXMlhXwc21HfocnG74peavWoYK7Her4YA7s2oP/2U1Eu/SikvNjbofFo04OYfveACpULoGpBhR0rChYsxLu5hqNWQwbu5dnwPUqrF3zK55GPvTqE/KS5mUxnYoZkhx7hcV/itmoVWE2zdvMY/EhCA4IQtfFFTuRgcZJU9exLIM7FHkRXjau48r2K2T4qTKZHuWgRdOszO4wihJ/zKaY2Yfv+zdrXm6zaNJaCsoJ+/RJNW2benBg5TqUprc4k9AST2M/cnvXxs0pTQ2hcZB+8sTfOcKkccvI2W4YTYs7yqalkcE7jkbZqH1Xr2DfjTCiAgNEC5CBAk5yuFAncvnoBSxLFsNJz4Ki9RtSJbcTyVFh3IlO4OKE8RgME9npib/GjHHcbTmY2rbil2RmjTrMj5lT5/PwVjB61RuQWzeM6FBdjB4fJzhHB6oXuMn2fUX5dWgxdO4fZaTUPVSjQlI95ujhx3iXc0/bePVy0XVyTxkL79iWNMlw6+gBjqvMaF6q6Aty8F00hqRyg6iYDi87losms3xNSmSx5vrWdRzOWpTv8rvI6ecuM8fI9TtDX695UcffZMb8Y7T5QcygYnZO7Y/EQHy2nCRcZYizmPmOb4QSBZMJCkvGxM6TiuXzYPpwA50GBZAnvw6lGzfl+qjhOE2cj9GSaVxrWI7gmZso82N/yuQQfzMxES0RrXK12pVFsxlBfFIs+/7aTJa2LfFI5xULe2cxuz+Dbg28jJ4d8E+zUfqYUN39gynbven2XX4MQhbz27r8DOhRBOXRUQy91prxHV1TNa6q+FDWr9tKfjHxPRlz/08vPP9bLbz8W8l9we99NvDiLmajSs/MRne3iXkotGWq2Sji/DTGrDCjXecqGAf+xcw9uRg2qgUZdYMYUK8N0V5VsAo+xrnYXHzfsxt1S+QUr/w0x7CXzUaqpEg2/jWLG3ce8DBXN35rl+etDnOv0rxoujz0ylb6DlwqJ+yJtCqmudjyn/CiMXmd3zaPLeFuDG5T8bOEF2VKAlfPnSQyxI/lZ7OIT4+cqFLCuZFSADfVHq5fvcmOqOosGCTOiRJJcP/GNY7JqnnwWAzuNeui2LSIjC3bk00/hf2zZmLfoRd5xUvVPFt+7O74MG7jMVwcMqEMDyIgQ23+GlCTG75r2B5gSYfWVbm2cRKh2b+jRmHbNHgRdfndnb/SedIZSjbvRBkPOamKBuvY3sPkaPQjTQo9u3Qw9vgo5l2tRpW8yQRHJpIYfJllm3zxqNCAku62Im8z3EsUxVm8Ah/7b2Xiis1cD3KgYsXCcp+XAZOGhjPiJbNRM+eHXL7ky98LfXCt2Zji2W1RRgexZttVKjeqiq0m8kn+0zWyo3ihLC/Ay9/iFJmctTHNShmyZcsRiuROYNo2VyaPqPxeHBPfttS8WfOi5LrvNnZs9yXCtRAFRKzW2YqJNimWGf3+Rr9YEYGtBtgbKgkOusq98MS04pTBrJq/F6/WLclt/oRYzMlZIFeaul8lET6CAhpH51c/KUSFPCIiPoHLB3y4nSkXNfJkT/X72DZvA5k7tqeQgKZlRjtxGhXn6sRYwuLD2DRsGv7KECzdvDE6tZ/7niXIlfSQG67dmdbcnqAbAZxctJSIlu3IdPUojyMlEix4D5cztaLaE3gZko/TG3ahU6se3sYaT+znfV6kafe3svJ8HlrVck3DEmmLxBC9oS1p8BJ15zx/ThzNjlgPymY3edpsU7ucNGjRTJxmZbMXaNv411LinfLhntGMO4f3cd4hL3XdxN9HFcKa5df5cXLv12pe1ElyqPjjII1+bElmEwNSHl5klfRdrEQ5aR5F8HnOx7lRJMcTm5cu9u5FqVIqN3oqA5lvfsz/fTqnTdszf2gZzv0+hRsd+lH38QnWHo2gRfMy3PXdxKwlB7DLVZKC4nsSfuMCBwLMqF0+O9ER0ZiYW+NSpColcz51PHqD2Uh8o66d45DPbJYfyUy7Xu2pXSiZeZNO0nhgOyLm9MGn9CS650+jIlWsyGDdNgpVbYlb5qe2wbcN8Vf+uxZe/pXYvuyXPj28JHJo/hT2yYI/oob7U2HeWdedvxO+Z1BrN3b8XId1ZvUp4WIqq000fmfu0HzwWDnNBDO+22TK/jIO97A1jJ77gM5jB5LX5okK8hU+L+pkTq2bxoApx+m+fi0NHN6u934lvMgJbv2vwwhxyI//LSOGjW6Hg96rNC9KDi2fwFnjivRsWOxZOOJHHjZv0ryolGKrPrON2YuPk6dOLeweXeKs0p3B7SsRffUwYyYsocjg6bR0k0UyJYSDmw5zLfwysXol+b6FBVN6iX9L7exEhERxetVqMtRrSQ4TByq1q4P+8RfNRpMOqxjYrpyc8h6zc9Ey0dj8QPZjE4gs1J/q+UxT7eJxgQcZOv4A5dqV5r7/Y+q3bIjRPR+W7omgcbumOFk+U2Fr4GV+YDN6thCTgMj01KY5HA/RxyD0DjaVO9PAO0uqiloRc4/Vf2/FySOaVXvz0LaUgphscWydoXgJXhZQRecIvkF3uXD6MS1/rEt40APO7ltHslNFigkQ3fbfR2ByNsqVKClaJGd85i3kXt7cWPkfY/9DG/r1EUdu8wQOrV/Epp0XKTZ4Gs1Fu/cxnjfDizha+65n0QGJFKlbhivbVpOxbn+q5jZl98jm+LoNYHCLYhhKiPr9gAsEhsanw8tD1qz0o3qr6jz12NGxJI+3F7Z6UeyaNIiTmdrRu62YaN6gjVErYti5ZhXm+WtTJo/DK31eNAXev3iYUw8CObYlhuwOETiWrYBiz3rCJVIm752DbFHWZ1RdC66eOcG6mQuIqNYcT+6JqUsf07Cj3HVp/0zzMiQXWyfMRafHz9TThLW8BC+Kq9MZvqsMY3uKb50AxfIxv6Io040W5d3TQ+T/2WsaB/drR1YwfbYPWes1Fid0zchT8OjUNu7n+J7erYpK9JsgjmgBVy5cjYlTHuysDbkr2ho/+9zU1sCLmITWrwnkp2l9Xm82ErPdlhkLUTf7gboOaYCUfH4ZE/clkknvMTeDbhJrmousVgrMrWzkwBFFrmpdKeOWFhmoiLzOnOmbyNO5NxVF3EemaeBFHHYtlcQnpGBsLJF9fofZcDCUdh3qkhR4mr+3+1GqZk3s1aEydo9TvGpd3HNkx0Hq/+R5vc+LHCACAwl7sJatl2rRr3OBVJ+wDROn4frDD/j9OhO34cMpkR5+lxB2i9UbD1GhWVuypcrw3z9aePn3svti3/z08KLi6obJ/Hq/NIu6l0iPzFBwaFQdzpVcQvcifrRruIeB20bjLkyiFk3G3mXjCc3alNYVjZnwxGE3g5p9QvZnbVrTo2nR9Fwf/4SXpOg7/DX3b9wdE5l4OD8r/mhIhrfMm3/Ci4T67R3BT/tKMXdUKU6O6czavJOY1TgTwS+ZjVSKcH4f2I8crcZTu4Ddu6va3/OIenOeFzGnnd3IwEWX6Tq4F+H7FqCS8OiqBR2JuLqPnkOW0WbObKray+lI5C9+r9y+upHTEm1Ur6AfPcYq8S6mR9GKtbA3FtW2OL8emTIT5dCxFD/7anjRmBxUKSko5H/2zxmJYa0RVMiuT0rUbeZMnotdo540zWfNlR2LWXIjDuWJy9QY9zsVnWVhfm6DfAYvzgSsG84ccRTs078ljvohLBo3mUyNBlHTy45L26ez53F+OnlfYdByD6YOLYtOko/4Pzx6CV4W0bGwPsnx11i64AS1u3fALnQ9vQacouPEoRS0hzXjhmBeezg1pH4k3uePgT1ZH5qdH1vX4PHDB9Rq1FI2FDU3d86g3Z+RLFs1Apf/ZtJ/59HwNp8XRVwYByRqa/nWfVhUmszE7/OhDFhO36n3yO6VkcYt24qz6UteuIpApk06SNuB7bF5uSZi+vFb8QuTD2Vl7MyeZH1DO2MfnWfh0uPU/l6AVRNz/QqHXc3nj6yaQrTKmO3hJSn2YCnR3tXIdW4PpzxyUUAihI7pVqdfxWgOHwsl8eRBFL17k+HYdgyt8mNzcz6bVE2o5nWVNdu9+PX/gRd1LNumDuS4cQ36/1iL1+2niYGrmb/DhFplDJj9+y4KNW2Kwm8Tp/QqMbRrRTJK1JxmjKaIg/ryHeepVq8+DpY6rzQb1frlxzc47IqG5/gCep7yZkEPz1S/r8RtfZikHk5P262MulOcUeVh057TFK1SF52jYzjpMIBmJURLIhFRe5fNJMChGp2recmhSfEMXp5GG2kIJ81sVKNRXSxUwWxaPJ89VxLJ4qSHrUdjOjUqgslLEXKvhZf0sZFqNtoh0UY/aOBFogQXTyShaFl2/P2I4WPqP/UvfHBuEduuetCmeXHJPfOuNshXTwUtvLzzEvH1/PCTw4uIMuXhCQYP/RvXuo0pmsVEvNCPsnJbLD2m9cdk6xB+Dm3P2l5502zUYve9cWg5iy6aM/QHT6b2+v1ZtNGto0z+8xBNevbEK5NoaV42G6liOb5oJCetWvNDfRcOjunCpYLD6FrLA+M3ZBJ7EV400SNnGDVoDZXG/0pFcdJVPj7CoK5/U0NuNXX3HUzDQ8WZ2toFxIZ8Yc8aHmRpRe9Olf6zR/1/GXVvgxeVIp6Aw2uZMH0tarfydO/zHdkVt9m40YdMro4c8I2l+Y/N8XKyTM27kerzEuCAx4PlrLXphFvsWcnHUg+HVL+OFA7IaUvxy68UP7OReWceUjq3q0Qb3eBksicjOgg4PFmsFI/4a/QfFOo9DC/926yWyJ1Yt7q0rpFfTo4PuHxmP8uXbyUuSzXat6hA3hzZsBb7vyaPRUSQH1tXLuCSXmFyGTzkpnkZeohWxy79kBgRdJ5DN5KoXLaIOCOeROlcDMewefRckotpI9JCpdvX+Jtc9QuhUVo/Pr2JbD128f1zPi8aeHHQTebqwdX8uWQ7YQYKDCyr0aev+OvYWwhsyyk2PgUjY2PUEYFp0UZ1GqAIOsT6/QESGSLhsrdc6CYaHDc7sw8eLv/mUOkEbl86z4mTfiQ4uGEZHIS+vTUXLsbQuFtz1Gc2s/mqCa071MZRIsY0jyIhhJvXz7N80wN6D+vA00CVJxtVYjhXjixjb0hZOrcsQPprLw1VFdF3zrBm8Toy1u5DHX+z+HUAACAASURBVCHAtIjrV0QbJV5gwcwjWApAqSvWR2fjMpxrVidkzSLixCnc6fhfbDNuw/imMr9E2+E7YQIh3XoKvIijuZhk4o/N52b+AXgbiCZxnxdje7vhu3C2+JyZkFmzCasjxN8nkgLe2VPXE3XYEa5a9WWGaF5UscEc2bOOcJua1C4j//6q/VQZS9CVW8SI9iU69B7XLp3l4rUwdGydKFSgAK4uDpgbmpLFzZUY/20cfmBHo9olBAAkYjI92qhpZiU3799iw7ogOo7oJP4+b5jZouHdOPo3Umr3loNCZlQ7fmaawVj62Am83H4CL6fIJ2U/PPgHwZ7DaewVx8F1y/BX5KNl0ypkNEnTDB2ZPpUb7fs9FyoNUfeO89eGm7RuW4O4+/cIk7w0F0/6cjtFUheI03wuiUKrWMKV4POHOX/rcWrUkEajdPRsFCWKPx/BqUPW/BUo4ijr85m5bL9Tm2ZFFVwKCk19R/noAjvvZqFWYTENZstNHptwVi/YReEf+1HY/r+TvRZe/svu8IW++znAiyaBUmTgWfYfu0JMilryo9iSv0xFPDMbcPvkEUJdylI005MZriYp/B6nbsXiXcCRi8cu4lS0JHaSNlIT2XPp9AX0cxYQR1CNmlUWzSv7OaEsTCU5JetKno4ze05hX7oSWUWvmxx+hTPX1XgVyZ2ePOnVnaiIecS56yHkkegKM0lxGS9hw0fum1Gp6JMoGCX3T+/mUcaSuCn8WXciWHKZyLYm2T+tsubFu6BsFE/Svn6icfImeFEkhHFw62bupVjilDM/WS2iCfQ/w/Gb8XhXa0j5ApmJEMfYNb6RVGjUApt7e1h99DQ29h7cvBhH4y6VOLh4HjjmkwifNF+jK1skImfhXEpflt9eDpcQ47REYqaZcuLpYkts8HV279pLcHQYKRbl6Ni2HGZR0h9BJuQVd4jd67dzN0kfe6eceJcqguGDs/ieD+DB41jJ5+NFnapObF20HfsqjXBXXOWU/Ft4XLJmaRXlkMYjJU1Lp1To4lH7e+rnS7PZK2/NfgYvyWfk5HxHzCGyueioeXRsNeH5u1HGUiKvNm7lekRWOjR2Zdu20yh19DAT1XxmZ/G3EXX3tZuPcKrenob5xHEk/VHI3y/fvBP9uAQClRmoXLsuhV3NuL5nlZwwdWjStJH4/jyfIez9D4Y3w0ss189dRt/RA+dMIg9J3KfxZ7LMnpsslmlZgW/7X0ft7oVLumo/JSaQM6dvEG2UVUxkuf6R+E2lSQdw5oGEBxcj82uzjSkJvXyCazpuFM8luUOeQIFobW76BWDq6Unm9OmtTrwtG7vkApHNNpOzA8GXA7DPl4fkKxeIdHRGcfMiUbYFKJY9zSE/2E9ALE8+jEPuS84RBddvPsTezYNYiQZKyCC/y2lGclxsaiTaqx517C1uxWanWN6MssFe5sj1FLyKepLB6DXqWIUcSI6eI0ylJ7lTrHF0zoGTvZlEuUVxPyiIB6GRJKrNyFVUQC5ETKtm7mSz15hx1ETfv8MjE1syxQSI1jIMhakL5YtLKPNbhoEy8gq+/koKlcqH0d3jXNQrgqfJfS7EZaSAmIPuPgzDQBHNzbuPyeJVGmfD+xy/kEC+oh4S6v5E2CoeXvQnRiLz3J+zYIYGnMT/sTklCzoQcMqPcF1LXDxy42xjTPzjO5y+FEHekp7oPr7Po6h0H6jX1Nc8Y1ZsRXtz6uJ1LFy8yWoYwf2wmJcSE0qmZhsHrCL8Oa9XkIp5bf51Covnq6GFl/e/lnz2X/w84CVNTJrkZ5okRzq6eh88mVd6icTcOsHkabO5HJzwQl+ZO+Wne+++FMz6cXwVPvRAeVuSuoT4eHQMjDE2MpAEbJJPIy6aJNkONAmvUpVSmnBq+Y2ukWi0YkIITTTAxtpEcqfIpi7AEhERiaEkmnuSlT05Jg4D+4wYK1JED6OLscGLpyuVQpLXxSemJtwyMDHHRKNqTxeCWlTe4ZFJGBgbYWJiLAmtJLJF6qRMfychUSH5LKxQJEmad1NJyCV1S06Kl9T8ihcXSnlHUDi1XmZGabujOjmSR9EG2IsDpY5ob5KS1RhIm1OjHyQNvkpOm3rim3HvXiSm9vaS4E4AWDY+XR2JZDExkWsK5DtqJQkxMSQZW8om9+zYrJb6RUTFilZJ0tObmkuZ8l3NYV+ZIj4GSRhKavbnU9l/iD5/m9novZcpstfI+MOnyH/vNf/nB1PbovvJTLuvb6Em+ZtIWVL2/zfjykeQ4TsWoVnr1TJP3lfOxi8DXlIXJHlE7fy0I191F0P679ImldzrIPc36Ejq79crqDR3QaSgkux/Bu9Lou/YkZ/yZ58TvHxKOXztZb/b3UZfuxS+/vZ9dHj5+kWqbeEXIIEvAl6SIx9y4sp9ChQuiIUmnbgkWbq0ZSMRJZpQ2v6ZaSEi4CIXsRPPa9GrSVbEs9v2oFPSjfhLMeQqLI5dppKpQE5e9+WukwSxweWUpGc3Dx7goac3pW1MiQi8SqCR2DEdzVEkJxIbl5h+qpOTnImRqAkT5UT57NGkXzYx+G8e059ijGjh5VNI/eOXqYWXjy/zT1GiFl4+hdS1ZX5qCXwR8KISle7R5Uu45tmcTgVtiL2+i1Hrkxkg4bS26fY9tTKe/ZvXo+dekXJ5HVOTIe2aNJOkLl3JdfE4d4xdqJQ/e6rmJvLscvofcGXGz8W4sPAvrlZrTOuMKjb9vRG7Sg0plc2S+377Wb3DlxhRMSeFhaAqWgHbzX8RkLM4WSQ1q+LhOYlqmEfXCgo2/TaVoxGvuX7M2IYqjdtSOX+Wf39j53seJVp4ec8C/Uw/p4WXz7Rj3nO1tPDyngWq/dwXIYHPH16SjjCk8zL0s9mhENtz8PkLmOR0w0xjF497RMGmY2lUzEZSnV9l887zFCom3ucW2bGXZD/bZ8zkcp5COD0OxcC9Cl0aFE27DVRi6bcOHY5ut9+w27U4FV5qJl5nx5lI6tSripU4Wqok6+DjBD0yWhlxw2cTB809qCIheUfyjaNlQQOuygV956v/QYs8OsRFRJHw5OasxM1MnGFGj36V0i6wEhufqbklJpK2/HOxXWrh5YuYm/+5klp4+c8i/CI+oIWXL6KbtJV8zxL4AuBlD4N6HKFonaISkpfMoWWrcW7WGmdx1w67tB39EiNpWcqAPdP7sjMyN3YS2+7Zug32kg3x4m4f7jfozU955Sr1OLkh2N4GQ7kE7PRxX25cuUiIUTYSzxziYf5iFNIX7/RkS+yz5aNqzaKYR15j2eozFGlWj/BDm1G4laGQchPrAirJrbHG/P7TQqrL/TV5Xr4gJ34VIydaMGB4zdRQzM/x0cLL59gr779OWnh5/zL9HL+ohZfPsVe0dfrQEngBXg4cOKC+efMmHTt2/NDlvvv3k/Ywdsw9mkmaeBOdRDZN/B33nv3JLXkd7h2aTaBTL5qVNuHasWNcuHqNx46l6FTFnXv+p9i1cBZr4nNQXNIQZ3T1pk2bathKGvLIiHDikzWXXig5v2oVN+VCsEYO6dkM9Eyxz5RBQtkUREpSrklLwnHNZ0jxCs1wMbnJmrWXKO8VxcijxZnT2ys9MdpzzfkC4OXQoUP88ssvZMumSW+vfb5WCYSEhKTejeLgID5g2uerlUBYmISeS+BB5sySxVX7aCXwjUhAoZBrHSRwZ+rUqej4+PioL1y4QJ8+fT6f5icdkou2TlOwWn65j0YhuSUkgVGr9qnZKyOu70Wn4M80LG4t9zOc4O9NZyhVtyGOhkEcOhiMk/FlFkV04I+2hhzed4nc1cqTQTQvETFJ6Y64GnhZKfBS6xm8SMsNzGzEXCThmJJT4MKiLky96s2vIztI+mQxNy2fxamzSoqPHJJ6Ydg/ni8AXjSaFwFVWrRo8fn0s7Ym710Cu3btIjIykmbNmr33b2s/+PlIQDOfNRGWtWvX/nwqpa2JVgIfWALxksZhw4YN9JZsy58fvMj9K1GajJtnrxKp0EgihcPLVpKteRucBV509U1wzpWfnI6GHFs0jqNxOcnplIFsRapTLJuR3JF1iD6Dr1C5giGR1oVoUdmL4EsHJfnPQ8EgzSP3fmiijby8KZXhyUVXcjOuR3kqF8osiXSSOL34FxZey0anbu0kOZAhexYMYv6t4iwf3+zVIdhfCLz4+/szePDgDzy8tJ//lBLQmo0+pfQ/Xtlas9HHk7W2pM9HAp+1z4sq4iorV+8hLCntRk2Nmefcjt04VK3xNDujjrUrTepVwFLuv4iPe4yf70GCrCrRvko24gP306NZb9wHr6BL+WxyD4YkxnpB9kpOpUcbtXF8ljVTvGzlJKMm1n8po7fY0KRILAfic9HFO565czZwO8qWpkP7U+oL1rxo4eXzmYQfqiZaePlQkv28vquFl8+rP7S1+TgS+Kzh5Z8iSGDF0F/JN2Q0ns97w8oV6mvGjuakMjulq9WVtPBmHF63FJ9bZjSvbcTug1aUc4ghoEI7Or5wi9hr4EWyLkbfOsjo6adoMUYyrhrFyk2c+/hz/j4qDhxPScVOuo++wPfj+uAUtIXxy4+k3uWQ9kQS/FCXTJkt06OLdHAsWp8eLatgJensP4dH67D7OfTCh6+DFl4+vIw/hxK08PI59IK2Dh9bAl8YvCRzZsceMleuieMbLoeICZALpWKyUNjTBRM9JRf2reX4PQvqtKol7z0PECrunDpBqHt+CltpLvVLf9TJ3LpwjmgbdwpkzSDpxUM5tOsstiUqki+jpmCBmxsHORxoRdmKhbB40yVbH7tH36E8Lby8g5C+gp9o4eUr6MR3aIIWXt5BSNqffHUS+MLg5auT/ydpkBZePonYP3qhWnj56CL/JAVq4eWTiF1b6CeWgBZePnEHfIritfDyKaT+8ct848WMmtuXJbz2SW7F19ZOkiwayAWLuprkjhJ2HXP7slzBkY0SLmk3/N45dojofOXIZ/G8RlNzoWKKXOD4mqzT8qaO3Nisn/rdjy+Xr63E9w0vmvD6F+6R+xIEJnVOvWJRxqvmXjvNpYaaNqSOW+3zVUpACy9fZbe+uVGfGl40NwjfuHYTi6w5cbB84ryk5P65QyQ5l8XVRmOHUxMfdpvj16IoVSp/WrZizd/GXmXXzsskGsiNxLI+GWfIgmeBfGRSBeFz8Cqa26gUyckS724k2ZTByNGLGsVc37mX1YkPOLjzBJGyCGq+r2NkSU7Pwng4qLl45CJWRUviYpa2IEbfPsVtpSt5HGLZt+00cYaaLMr6WGZ2Jb+XBzbGn/beqzfBizIlnjN7NnI5RGT15BFz6YPL1zHMmZeMcmu05jG3d6dcxRLYib+WKimcLYsWcMs0J56ZNfAiqQYWzyW4Zheq26X/PlshirtbcWPXMtbdFn8vTRJHdTyBV0JxyO0suZo0X1WRmGxBjdYNcEov5507SPvDf0jgzfCSQnR4JHIZ9+sfHQO5sdtakoBqfqLk4cl9xHlUxDHqKpf1PSji+NzVtnI3XHhIGHo2dljqpXD3xhXuPIp97mZvFXpGmchXKBeW8lpS9GOiEl9duL6hKZaW5k9vJf/3Xasm+fEdzoXo4Z3HSYZXHP6nA8iiuc8u9Xr0tEclQB0TLbJQvAqqdTGxssZCMqFrny9DAlp4+TL66b3W8pPDS8JD/pyxGLfGnSjvmjG9bSnsGNyA0KbraVtAMhCqlfjtXcLU2cdptXAuVSzTfqYMmsH3w6Jo3qUyljoq7vod4EKyO71bFCUw4AHJqki2jZ+Kot0w6mXRw9A2O4Xd3z1JmyrUhyZNNtL61zZk1lWREHyRHXtvULdPP/Q2DmGZVQ+mdsyHofIBC3sNxqrzNOra7qFBs8P8ML4FtslRXD+1iyspBfnpp5Zktfx0DlFv1LyoFEQ8ekjM00g+ia67tpk+c+MZ9VsLHNJ9yvSMzLGzs8FINoHQgIOs3BtEyUJ5UIjmRrPRnZ4/nYf1e1MnFV50MHXIhaezKb6Th7CzaFe+zy4Ap7jOmB+30mZuH5xTxZHI5tlLKDt4FJ7m2pPxf53cb4QXCWbwWbGRm7H/3LDVyfHcffAIW5fSNO5UOzX9hCr2POMG7qThuB+5u2wZiQ27UDfTc2NY5mXI+R3M3a/i+y7V0X8cxBmfXYRnKYqHaSg71u3EqHRnutb3wkzg5visgexR5yazUGvS3RPcNiiEuwwutYy/2CRTGnRshbPpM8hPubaBTSFFaFw2ayrk3j6xgeVbThKepEOWAtVo2bAc9iYvHQoEqC7uX8PGwwGYW8lCoY7j7NErZCtRmIwybnUsJCK1VU0sw66zfN1mVKYZ0U+RIIz7j3F0yoaJXAcT+yAUixqt6FhEm7jzv47Hj/W+Fl4+lqQ/o3I+B3iZM3UBHk07UzGn3VN42d6vFo9abKV9IUPUohnYvPQPEh/eZX3mgSzvIHl3ZJ9TBk6lx3R7Rk9phY2sYcqwa4ycto7WPXvibie5elShzGv7IynDVtHNXVZjWWyTkxToGRqip/l9SjIqOWnq64tm5RV9ogrdSYPmx5m6ewSu6Wv2yQXd8c3wIz1qqRjVagKlp/1J3rPD+el8Xf4eVhKDB6uo1y6IOTsH4CTvqCU/0epJ/Qjz6kSX6p6fTHX9rj4vGjOBQtIS/NZtMPG9ljOykAF6co/YM5W7WtoUy+IBLblbeBg/FVNy6OIj0corubRyISHVvqNiBtHMqK0oVLMc2QwUAi/DOFztF3q5iUBSLtG/xVo6rxpOjlSZxrN87FSK9B+phZf3sC68zWyk6V+VUvmcdkRz5Zoe6qj7rNt6kGK1W5A9g64ARRLn545gfb4hDMx8ioFj53PnegAK57zYyXkCyXxVvetEmhezJuzgr/x5txG9m+WQfFoBrJg5nRVnFHQd/yu13DKgZ6CZbwoOjP2ZpA5TqJpZj7BNvdlgPYJO5axQK+LY+OdC8rXuhofFMxhJ8ulN36ttmfFTAeIvzKLTxFD6Tx5EfjsF++YO5qC6Nn1/qCJanWezNznmISsXLsezXidcNYnSVWGs/nM3hTs2J4fMc109Q0zNjIm95ccGv2Aa1q6KWWwgK7afo0Ltejha6RLks57tFoXpVuLdtbTvoeu0n/gPEtDCy38Q3pf66pcAL0lR/sz7Yx81mudleA9fRq4ZSk4xXbwML3G3jzNm3iG+/7m7mJski8/L8JJwgzkDJ5HpuzHUySmb5ogxmLYcT6MCNu8GL4pINk/6mYcFh/B9NVdu+Uxl+fE4IkMNaTG6L0Vl4VO+BC8a35AbB5cy57wF43vUF7X4p9EuvCu8pETcZP2KNRw/eBaLHv1w9/PDrmh5yhXOgbHUXZ30iL1/TWfdXR2KFa2H9/35zNBrRGN3nVSzUYiYjarZqTi7bCNZpv1BSysNvPRgQlgOymo0MnL637L0PCXbyvUcqftUipiRIvlh6q9aeHkPi8jb4EUhiT537d7N42SBdpF/XISCPI2kHyUFxBN4cbFScf/8Nn4ZtImGayZjsHkNhgWqord0OFHdF1DHMQ0wdOQwEBMdRWKKGlPjZDZL0tBYQ1sUcbe5ej0KZ8+86N+9SYGuoymXRcWeYR3xK9CBwnLSiD42m8Om7aiZ3zQV8P1OXqbGTz3J9Sp4+dGWaW0GYDd2Ea1ypBmNkyOCmDt/NWVadJEoUI3ZUqZ7/H02zxzHjlB3+jZ3YcmBSDzs4vDdewG3CiXJqIgh1qYQHet6kxh0lgVbD5ErXwGME4LZd/IGBYuXxNZMl5AzJ7lbrBF9y+R8Dz2i/cTHkIAWXj6GlD+zMr4EeHm0dwhzb9Whn5ho9vdqQGDrtZIk0AqVaF4adDhNkVr5MYiP4XF0MjnKNKRdraKYGsgC+zK8yHkz9NIm/tz2AC/LR+wxqMfo9gUxf401R6N5qVt5Jl6tymGVkkBEeDgGDkVp36kprhkMSA4L4LcePXlcbyzTmhVMBaB/wIuUGSYbwYgt4Uwb3Ab95+zuH3MovB1exFQUeJApkzfiXK8dWS6t53C5X+hufYkDO3dxVkxfPTpXJxMPOHQ4FHPbawTczo7XgyVsKzaFfkXAZ2hf7nSeyndOSnaPHE5Yr19T4eXIpOGcqj+K3jnTNC8/N1lFl3Wj0PxRo3lZOmI8BfpqNS/vYzy8DV6SH1xmyc6zeJcuI7mmVFzcvouoKnVpYqN6Ci9OhhHs3LAGvyNB5P6lPsZ+OpSuXJCzg+qwxq42eS1lbulYU6FeFSL9D3L19FEMKv5E4pHlJJg5oIgJJDBYF09PVx6fl+tc+s6gurOaPcM7c6N0N7wz6hJ5aDL7zX+kfiEz0bwkcHL/SSp26fFKzcv0pmE0+cmfWav64JCumFHLQWL9vL8wLNuMOvmyaNCFR0dWMO96JrIo7lAyWyxTI1swoXoMq+fvEs1LC1zCLrLsVCKdmlUi+fY5lvicolCRohjHC9D5XqVo6fJkNNfl4fFDXPOsQ+/SOd5Hl2i/8REkoIWXjyDkz62IzwVe3MVsVOmp2SiZbX1rEdpym5iNkljS0psDHj0pKX4risD1nDDsxoxhtTAJmkrnX/XpOaQsu7r/QHL/XQwsbaXJiawJLngFvIgZR+zb22b34bdjudmyvBfWb4hA0MBLvcZ7GbT4Bx4un8nOrJ2Z0zo3GiOT5rWwmz7MHPU7JxzbsX5c49SMza+Cl5DTmxizO46pYmr5LOFFfA6u7/+LX/68SpcpEygvbkGn5oxmW/EhjCwgPgmSsTpgdT9GH3Jn5LiuZJdoosBLazl5w4Xiurv4eckFMQsoeXDhMjp5PVMzXitVznRfPJHyZinsG9ubtY6VqCrmJJT3WDLpKNX7NcM+XfNyfv95Go0do9W8vIfF4e3wcoWVAiW161THxkTJ2TWruVGkPA2tn8GLi7Vm8sSzZcw0dPoOprbGj15H7pLr34monn9RN13z8qS68et7MNO0B46hflSuU1vMt8c4ftWQ2rW8uThvOI9rjKSawIvPiL7odp1CJftXm43ytur6SniZVu8etYc8ZPXSH0jTsWjmdjRb5i8gsURjmnhpfGLEnCmuPCmSWX3L6s3kcwznx5VxVMqRyAXRqmQt6oV1XAj3bSsxpXd9koL82HwxhEZ1qmIqsPVPs1EhuhbXmo3ew5D8KJ/QwstHEfPnVcgnhxdJ+rd0yh8Y1fqeZp6O6QtTBPM7tMRm6Bbq6K+lWXd/2veqhCYCV62M5sD2kzQYNIL8cbOe+ryYB67k59+u0WnsQLzsjNLMQP/QvIi6OeoWy/6Ywv6rVrQd8wuVs5q80mSU9vozn5ds4Sfp13U+pcQ/o5G7uXwomNXjxqBXsweG26ZxuugAfqnpjN7Dl3xexJn11Prf2RaVj2EdKomvzudnNkpJFFPQtkPkKFsTNztNgkYlJ2ePSoOXgqkODhpp8PDqBXSyeOIgmRhvXVwj8OJKXc87/L4ZmjZ2ZtnE/TSZ/DO5n08aqQxjyZDxPPQuRx5N8IbyLgsnHKFGf3EETtW8SLLJPWe18PKeloW3w8sl5q3Zi0seLywM1dw+cwnzBk2oa53ygs9LKryMlht6+8mls6lBgCkc6NecU2V6UkLjYCazJmve4jhn0CMVXkx+wtp/ZarmRRlzi1vBenh5Zhet4xkKaTQv2RL46/uWXMtdGU3AUtyljfgbV8c7h3xcmUJwmIr2g/q+0mw0vSPihL+Y5sumUEKj9dEMo/hgFs1dikftDpR2e+LoL7WMfczm1ZsoWNWLbauuUbyiIzt23KJ12+qpZk8DU2u5aNeUkMuHmL10PRYO2dFPfMzZK/fJmTsfVuJMHB5wC8NG3RlSwe099Yr2Mx9aAlp4+dAS/gy//6nhRZwoOLNyGrPu5mFSnzrY6MtCdvxPfpoSybhFvYhc0J/5mQczp3Fm0XgIvKhS2PTHMBLz/0Bjp430fOqwm8z+haM4ZVCD7i1KSjZlgYR/wEsK55YO5bBJQ+pkvsioJfEMmdKVnGLnftXzosOugocHp/DLanOGTOgEu0Yy6UYlxvapiFnYIYb1X0WNsVMorbfxOYddCTcWrcv0xcep+ONAquaxS9MIfYLn7Waj5yv1Knh5sdJP4KVR3bwE7F/H2k17eZCrIzO7ln7hklJl+HnGzvKjy5B22GnErDUbfdDefxu8pITeYt1uX+yyuoppVQajrikueXNjl/Lo7fDStzlnK/ajtJh9NPDi6F4IJ9HY3J7bnvlWP+OWHEi1ummal2Pno3HMaIz/Lh/cuo+notVJhg+9zE+TvksdB69y2H2d5mVGNw/Ozf2ZxcrmDO9cDrHYcu/Uav7aF8N3XduSxeIZLT+Bl8LNmpPku5bNh66hyFudfs1kXD43+QJOb+BihCt1KudHN/KWVvPyQUflh/+4Fl4+vIw/uxI+ObxokkjF32PduL5M2BONk62SR7q5GTFjApVsbzCsxwpqzBpNqbSkIKIalhwru/5k3b2sDKpwhT4znkUbxd09y6jpm2nVvx9e9v+MNkq+Lg5/wyKZtLiHRMHIVRHz2rLa4GeGdizCq66aejnaSBOBsW3cd1zPVB7/3XfovnAEBQV8dES7EuQzgrkXvOnfPJa6hYagzJ0FPUn8ZuxSjv7D+lHBXaIu5OT3idiFDwYv9fJzZct05m4PkBQuUSiyV6BzhyYUcJb2am5qP7Ca1WHZGNCkZFrbtfDyQdeAt8GLWpOQUBIG6km4nc5zm7kiQubg1gMSbdQyNdrolZqXAd8T/bzZSJ3A+bVz+euBA/mTL/DQsgTfta6OvaGKpGTxEQsOJVZliI29LfG7xjHLsBe/1ReAl6+/CC+xEm20iNfCS/cC4hcTw7bpP/PnkWgs9BOIMfNiwKhBFM9q+kI7nsJLi/aYXvmb8TN8iDSwIHvJBnSQ0GonSw3oKNk7dzQ6FfrLvBSH4QgtvHzQQfkRPq6Fl48g5M+tiE8PL88kkhQTxuM4sE3NJfIRkroJCMVFPuRW4AOeQUSK1wAAAutJREFUpjhJr46xpQM5cmRJ0+B8Bc//Cy9XNi3heJ7WdHB79cVh92/t4+K5CG4G+JPoWJoWDSuQ2VyiVPz2s3nXMW5HpJCr+g+4J5zC2L0ihVzTb2pX3ObPcYeo2qUsJ9av5uJ92YyylKL9d9UlD8dXIOhP3IS3wcvL1VPF3mSlRO1cCU8ms2c5WtYrh3VqhrokTq7cgLphc7xTLYcKLiz4nfj6vSieFiYmsBrKyUsheBXII/CfxM3zhzlw4ioxyYq0rLby6BiaU7BUYcL9QyjWshZZ04dT9Jm/OWNUDoNrPhy9EUrGHCVo1KAM1m8cA+J9FRdNtNKYjJZPUlW+2CJFQhS+e7bwIDyWeynONGtWjawm8QQc92Gn7yWiLfLRuUVWuZ8ugcqNS0tyPU0eu0eiKQoiT24LdizaQlCSOaVaNqecs80n7k1t8e8qAS28vKukvqLffU7w8tHFKvASFRzA2QsBxCteLN3cLgeFCnnIKe9bhBeNG0IKKl19DF4Db0oJb5UkpejoG2L4ChmpFckkqw3kfbWcjDWn/Jd6V5NvRJWaxF20AF+HjD/6+H1Fgf8vvHwOdX6fdUjNYyPjSpO75hNlJXifzdF+6x0loIWXdxTU1/SzbxpevqaOfEtb/j/NyzckmK+sqd86vHxl3altzjtKQAsv7yior+lnWnj5mnrz9W3Rwsu30c9aePk2+lnbyhcloIWXb3BEaOHl2+h0Lbx8G/2shZdvo5+1rdTCyzc/BrTw8m0MAS28fBv9rIWXb6Ofta3Uwss3Pwa08PJtDAEtvHwb/ayFl2+jn7WtfAO8HD16VD1ixAi8vb21cvqKJXD9+nUSExPx8vL6ilupbZqfXLCYIhFERYrIJUTa56uVgL+/P8nJyRQuXPirbaO2YVoJvCyBpKQkAgMDmTJlCjrx8fHqGzduaKX0DUhAX18fheKlWOFvoN3fWhN1dXVTw0i1z9crAW0ff719q23ZmyVgbGyMi4sL/wOIU7OKFgZNHgAAAABJRU5ErkJggg==
UART工作在单线半双工模式时,UARTx_TXD引脚需要配置为开漏输出。另外用户应采取适当的应用层保护机制,以确保不会出现多主机同时向总线发送数据。
三、UART单线半双工通信示例
硬件采用CW32L083VxTx StartKit单板,用杜邦线连接PA08和PA06引脚。
UARTy查询方式发送TxBuffer1缓冲区中的数据,UARTz查询方式接收数据,并存储到RxBuffer2缓冲区。
UARTz查询方式发送TxBuffer2缓冲区中的数据,UARTy查询方式接收数据,并存储到RxBuffer1缓冲区。
比较TxBuffer1和RxBuffer2、TxBuffer2和RxBuffer1,如果数据一致,则LED1亮,否则LED2亮。
1.配置RCC
void RCC_Configuration(void)
{
RCC_HSI_Enable(RCC_HSIOSC_DIV6); //SYSCLK = HSI = 8MHz = HCLK = PCLK
RCC_AHBPeriphClk_Enable(UARTy_GPIO_CLK | UARTz_GPIO_CLK | RCC_AHB_PERIPH_GPIOC, ENABLE); //外设时钟使能
UARTy_APBClkENx(UARTy_CLK, ENABLE);
UARTz_APBClkENx(UARTz_CLK, ENABLE);
}
2.配置GPIO
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure = {0};
UARTy_AFTX; //UART TX 复用
UARTz_AFTX;
UARTy_TXPUR; //UART TX PUR
UARTz_TXPUR;
GPIO_InitStructure.Pins = UARTy_TxPin;
GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_OD; //开漏输出
GPIO_Init(UARTy_GPIO, &GPIO_InitStructure);
GPIO_InitStructure.Pins = UARTz_TxPin;
GPIO_Init(UARTz_GPIO, &GPIO_InitStructure);
GPIO_InitStructure.Pins = GPIO_PIN_3 | GPIO_PIN_2; //PC3 LED1 / PC2 LED2
GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_Init(CW_GPIOC, &GPIO_InitStructure);
PC03_SETLOW();//LED灭
PC02_SETLOW();
}
3.配置UART
void UART_Configuration(void)
{
UART_InitTypeDef UART_InitStructure = {0};
UART_InitStructure.UART_BaudRate = UARTyz_BaudRate; // 波特率
UART_InitStructure.UART_Over = UART_Over_16; // 采样方式
UART_InitStructure.UART_Source = UART_Source_PCLK; // 传输时钟源UCLK
UART_InitStructure.UART_UclkFreq = UARTyz_UclkFreq; // 传输时钟UCLK频率
UART_InitStructure.UART_StartBit = UART_StartBit_FE; // 起始位判定方式
UART_InitStructure.UART_StopBits = UART_StopBits_1; // 停止位长度
UART_InitStructure.UART_Parity = UART_Parity_No ; // 校验方式
UART_InitStructure.UART_HardwareFlowControl = UART_HardwareFlowControl_None;
UART_InitStructure.UART_Mode = UART_Mode_Rx | UART_Mode_Tx; // 发送/接收使能
UART_Init(UARTy, &UART_InitStructure);
UART_Init(UARTz, &UART_InitStructure);
}
4.定义变量
//UARTy
#defineUARTy CW_UART1
#defineUARTy_CLK RCC_APB2_PERIPH_UART1
#defineUARTy_APBClkENx RCC_APBPeriphClk_Enable2
#defineUARTy_GPIO_CLK RCC_AHB_PERIPH_GPIOA
#defineUARTy_GPIO CW_GPIOA
#defineUARTy_TxPin GPIO_PIN_8
#defineUARTy_AFTX PA08_AFx_UART1TXD()
#defineUARTy_TXPUR PA08_PUR_ENABLE();
//UARTz
#defineUARTz CW_UART2
#defineUARTz_CLK RCC_APB1_PERIPH_UART2
#defineUARTz_APBClkENx RCC_APBPeriphClk_Enable1
#defineUARTz_GPIO_CLK RCC_AHB_PERIPH_GPIOA
#defineUARTz_GPIO CW_GPIOA
#defineUARTz_TxPin GPIO_PIN_6
#defineUARTz_AFTX PA06_AFx_UART2TXD()
#defineUARTz_TXPUR PA06_PUR_ENABLE()
#defineUARTyz_BaudRate 9600
#defineUARTyz_UclkFreq 8000000
#defineTxBufferSize1 (ARRAY_SZ(TxBuffer1) - 1)
#defineTxBufferSize2 (ARRAY_SZ(TxBuffer2) - 1)
typedef enum {FAILED = 0, PASSED = !FAILED} TestStatus;
TestStatus Buffercmp(uint8_t* pBuffer1, uint8_t* pBuffer2, uint16_t BufferLength);
uint8_t TxBuffer1[] = "\r\nCW32L083 UART HalfDuplex: UARTy -> UARTz\r\n";
uint8_t TxBuffer2[] = "\r\nCW32L083 UART HalfDuplex: UARTz -> UARTy\r\n";
uint8_t RxBuffer1;
uint8_t RxBuffer2;
uint32_t NbrOfDataToRead1 = TxBufferSize2;
uint32_t NbrOfDataToRead2 = TxBufferSize1;
uint8_t TxCounter1 = 0, RxCounter1 = 0;
uint8_t TxCounter2 = 0, RxCounter2 = 0;
volatile TestStatus TransferStatus1 = FAILED, TransferStatus2 = FAILED;
5.主程序
int32_t main(void)
{ RCC_Configuration();//配置RCC
GPIO_Configuration();//配置GPIO
UART_Configuration();//配置UART
UART_HalfDuplexCmd(UARTy, ENABLE); //单线半双工 UARTy
UART_HalfDuplexCmd(UARTz, ENABLE); //单线半双工 UARTz
while(NbrOfDataToRead2--) //UARTy -> UARTz
{
//UARTy发送一个字节数据
UART_SendData_8bit(UARTy, TxBuffer1);
while(UART_GetFlagStatus(UARTy, UART_FLAG_TXE) == RESET);
//UARTz 等待RC
while(UART_GetFlagStatus(UARTz, UART_FLAG_RC) == RESET);
UART_ClearFlag(UARTz, UART_FLAG_RC);
RxBuffer2 = UART_ReceiveData_8bit(UARTz);
}
while(NbrOfDataToRead1--)//UARTz -> UARTy
{
//UARTz发送一个字节数据
UART_SendData_8bit(UARTz, TxBuffer2);
while(UART_GetFlagStatus(UARTz, UART_FLAG_TXE)== RESET);
//UARTy 等待RC
while(UART_GetFlagStatus(UARTy,UART_FLAG_RC) == RESET);
UART_ClearFlag(UARTy, UART_FLAG_RC);
RxBuffer1 = UART_ReceiveData_8bit(UARTy);
}
//检查收发数据一致性
TransferStatus1 = Buffercmp(TxBuffer1, RxBuffer2, TxBufferSize1);
TransferStatus2 = Buffercmp(TxBuffer2, RxBuffer1, TxBufferSize2);
if(TransferStatus1 == PASSED && TransferStatus2 == PASSED) //PASSED
{
//LED1亮
PC03_SETHIGH();
}
else //FAILED
{
PC02_SETHIGH();//LED2亮
}
while(1)
{
}
}
6.测试结果:UART半双工通信方式工作正常, LED1亮。
大佬不会用贴代码的框框吗注意编辑工具栏的 <> 这个符号,点一下体验体验。
富莱电子的H7-TOOL开发工具可以仿真烧录芯源的单片机 二楼的建议很中肯 发送的时候,接收是屏蔽的。如果能同时接收,可以扩展特殊用途,如线路仲裁,单线总线通信。
页:
[1]