<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>AT32 on Rancho&#39;s Notes</title>
    <link>https://fan-pengfei.top/tags/at32/</link>
    <description>Recent content in AT32 on Rancho&#39;s Notes</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Wed, 12 Oct 2022 15:07:03 +0000</lastBuildDate>
    <atom:link href="https://fan-pengfei.top/tags/at32/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>AT32F403A系列单片机开发</title>
      <link>https://fan-pengfei.top/posts/at32f403a%E7%B3%BB%E5%88%97%E5%8D%95%E7%89%87%E6%9C%BA%E5%BC%80%E5%8F%91/</link>
      <pubDate>Wed, 12 Oct 2022 15:07:03 +0000</pubDate>
      <guid>https://fan-pengfei.top/posts/at32f403a%E7%B3%BB%E5%88%97%E5%8D%95%E7%89%87%E6%9C%BA%E5%BC%80%E5%8F%91/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;记录AT32开发中遇到的问题；&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;硬件部分&#34;&gt;硬件部分：&lt;/h2&gt;
&lt;p&gt;硬件部分我是参考官方开发板来做的；&lt;/p&gt;
&lt;p&gt;经过测试，硬件部分没有任何问题；&lt;/p&gt;
&lt;p&gt;原理图
&lt;img alt=&#34;2e8cc9324c8e969b2ba048221939699&#34; loading=&#34;lazy&#34; src=&#34;https://fan-pengfei.top/posts/at32f403a%E7%B3%BB%E5%88%97%E5%8D%95%E7%89%87%E6%9C%BA%E5%BC%80%E5%8F%91/img-1.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;PCB仿真图
&lt;img alt=&#34;f12b1584db83aef4fbd8cc925b76d40&#34; loading=&#34;lazy&#34; src=&#34;https://fan-pengfei.top/posts/at32f403a%E7%B3%BB%E5%88%97%E5%8D%95%E7%89%87%E6%9C%BA%E5%BC%80%E5%8F%91/img-2.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;实物图
&lt;img alt=&#34;bbea8d18667d74360d3ef9c638453d5&#34; loading=&#34;lazy&#34; src=&#34;https://fan-pengfei.top/posts/at32f403a%E7%B3%BB%E5%88%97%E5%8D%95%E7%89%87%E6%9C%BA%E5%BC%80%E5%8F%91/img-3.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;显示效果
&lt;img alt=&#34;dcf5793c87931e4e32513eca0f71157&#34; loading=&#34;lazy&#34; src=&#34;https://fan-pengfei.top/posts/at32f403a%E7%B3%BB%E5%88%97%E5%8D%95%E7%89%87%E6%9C%BA%E5%BC%80%E5%8F%91/img-4.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;有几个值得关注的地方，我将在下面列出：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;使用编码器开关作为输入设备；&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;使用CH340E芯片作为串口转USB；&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;通过TYPE-C接口的正反插实现不同的功能（连接CH340E芯片和AT32的USB引脚）：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;屏幕接口采用的是FPC0.5mm接口，方便安装；&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;硬件部分的测试很快就结束了，主要就是测试各个外设是否能正常使用；&lt;/p&gt;
&lt;p&gt;经测试，主控芯片、屏幕、spiflash、USB接口、CH340E、编码器开关、RTC时钟均能正常使用；&lt;/p&gt;
&lt;h2 id=&#34;软件开发&#34;&gt;软件开发：&lt;/h2&gt;
&lt;h3 id=&#34;参考资料&#34;&gt;参考资料：&lt;/h3&gt;
&lt;p&gt;主控芯片使用的是雅特力的AT32F403ACGU7，其特性如下所示：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;f9ed3e62565a45863771434081c095d&#34; loading=&#34;lazy&#34; src=&#34;https://fan-pengfei.top/posts/at32f403a%E7%B3%BB%E5%88%97%E5%8D%95%E7%89%87%E6%9C%BA%E5%BC%80%E5%8F%91/img-5.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;参考资料网站：&lt;a href=&#34;https://www.arterytek.com/cn/product/AT32F403A.jsp&#34;&gt;https://www.arterytek.com/cn/product/AT32F403A.jsp&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;ae1d18fa022ab02fffa6a006428d441&#34; loading=&#34;lazy&#34; src=&#34;https://fan-pengfei.top/posts/at32f403a%E7%B3%BB%E5%88%97%E5%8D%95%E7%89%87%E6%9C%BA%E5%BC%80%E5%8F%91/img-6.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;下载固件库源码，经解压后，可以在目录:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;\A&lt;/span&gt;T32F403A_407_Firmware_Library_V2.1.2&lt;span style=&#34;color:#ae81ff&#34;&gt;\p&lt;/span&gt;roject&lt;span style=&#34;color:#ae81ff&#34;&gt;\a&lt;/span&gt;t_start_f403a&lt;span style=&#34;color:#ae81ff&#34;&gt;\e&lt;/span&gt;xamples
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;找到各个外设的例子：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ ls
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;acc/        crm/    gpio/  spi/         wwdt/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;adc/        dac/    i2c/   sram/        xmc/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bpr/        debug/  i2s/   tmr/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;can/        dma/    pwc/   usart/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cortex_m4/  exint/  rtc/   usb_device/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;crc/        flash/  sdio/  wdt/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;首先当然是串口打印和点灯，这样能测试时钟配置是否正常，以及判断芯片好坏与否；&lt;/p&gt;
&lt;h3 id=&#34;具体开发&#34;&gt;具体开发：&lt;/h3&gt;
&lt;p&gt;关键代码如下：&lt;/p&gt;
&lt;h4 id=&#34;点灯&#34;&gt;点灯：&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;at32_led_init&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    gpio_init_type gpio_init_struct;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;/* enable the led clock */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;crm_periph_clock_enable&lt;/span&gt;(USER_LED_GPIO_CRM_CLK, TRUE);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;/* set default parameter */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;gpio_default_para_init&lt;/span&gt;(&lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;gpio_init_struct);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;/* configure the led gpio */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    gpio_init_struct.gpio_pins &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; USER_LED_PIN;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    gpio_init_struct.gpio_mode &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; GPIO_MODE_OUTPUT;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    gpio_init_struct.gpio_out_type &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; GPIO_OUTPUT_PUSH_PULL;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    gpio_init_struct.gpio_pull &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; GPIO_PULL_NONE;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    gpio_init_struct.gpio_drive_strength &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; GPIO_DRIVE_STRENGTH_STRONGER;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;gpio_init&lt;/span&gt;(USER_LED_GPIO, &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;gpio_init_struct);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;at32_led_on&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    USER_LED_GPIO&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;clr &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; USER_LED_PIN;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;at32_led_off&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    USER_LED_GPIO&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;scr &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; USER_LED_PIN;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;at32_led_toggle&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    USER_LED_GPIO&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;odt &lt;span style=&#34;color:#f92672&#34;&gt;^=&lt;/span&gt; USER_LED_PIN;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;串口&#34;&gt;串口：&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;uart_print_init&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;uint32_t&lt;/span&gt; baudrate)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    gpio_init_type gpio_init_struct;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;/* enable the uart and gpio clock */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;crm_periph_clock_enable&lt;/span&gt;(PRINT_UART_CRM_CLK, TRUE);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;crm_periph_clock_enable&lt;/span&gt;(PRINT_UART_TX_GPIO_CRM_CLK, TRUE);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;gpio_default_para_init&lt;/span&gt;(&lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;gpio_init_struct);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;/* configure the uart tx pin */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    gpio_init_struct.gpio_drive_strength &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; GPIO_DRIVE_STRENGTH_STRONGER;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    gpio_init_struct.gpio_out_type &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; GPIO_OUTPUT_PUSH_PULL;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    gpio_init_struct.gpio_mode &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; GPIO_MODE_MUX;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    gpio_init_struct.gpio_pins &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; PRINT_UART_TX_PIN;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    gpio_init_struct.gpio_pull &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; GPIO_PULL_NONE;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;gpio_init&lt;/span&gt;(PRINT_UART_TX_GPIO, &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;gpio_init_struct);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;/* configure uart param */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;usart_init&lt;/span&gt;(PRINT_UART, baudrate, USART_DATA_8BITS, USART_STOP_1_BIT);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;usart_transmitter_enable&lt;/span&gt;(PRINT_UART, TRUE);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;usart_enable&lt;/span&gt;(PRINT_UART, TRUE);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;串口重定向&lt;/strong&gt;：&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
