当前位置: 首页 > news >正文

如何做服装企业商城网站优秀wordpress主题

如何做服装企业商城网站,优秀wordpress主题,软文代写平台,十堰秦楚网手机版系列文章目录 I.MX6ULL UART 串口通信实验 I.MX6ULL UART 串口通信实验 系列文章目录一、前言二、I.MX6U 串口简介2.1 UART 简介2.2 I.MX6U UART 简介 三、硬件原理分析四、实验程序编写五、编译下载验证5.1编写 Makefile 和链接脚本5.2 编译下载 一、前言 不管是单片机开发还…系列文章目录 I.MX6ULL UART 串口通信实验 I.MX6ULL UART 串口通信实验 系列文章目录一、前言二、I.MX6U 串口简介2.1 UART 简介2.2 I.MX6U UART 简介 三、硬件原理分析四、实验程序编写五、编译下载验证5.1编写 Makefile 和链接脚本5.2 编译下载 一、前言 不管是单片机开发还是嵌入式 Linux 开发串口都是最常用到的外设。可以通过串口将开发板与电脑相连然后在电脑上通过串口调试助手来调试程序。还有很多的模块比如蓝牙、GPS、GPRS 等都使用的串口来与主控进行通信的在嵌入式 Linux 中一般使用串口作为控制台所以掌握串口是必备的技能。本节学习如何驱动 I.MX6U 上的串口并使用串口和电脑进行通信。 二、I.MX6U 串口简介 2.1 UART 简介 1、UART 通信格式 串口全称叫做串行接口通常也叫做 COM 接口串行接口指的是数据一个一个的顺序传输通信线路简单。使用两条线即可实现双向通信一条用于发送一条用于接收。串口通信距离远但是速度相对会低串口是一种很常用的工业接口。 I.MX6U 自带的 UART 外设就是串口的一种UART 全称是 UniversalAsynchronous Receiver/Trasmitter也就是异步串行收发器。既然有异步串行收发器那肯定也有同步串行收发器学过 STM32 的同学应该知道STM32除了有 UART 外还有 另外一 个叫做 USART 的东西 。USART 的 全称是 Universal Synchronous/Asynchronous Receiver/Transmitter也就是同步/异步串行收发器。相比 UART 多了一个同步的功能在硬件上体现出来的就是多了一条时钟线。一般 USART 是可以作为 UART使用的也就是不使用其同步的功能。 UART 作为串口的一种其工作原理也是将数据一位一位的进行传输发送和接收各用一条线因此通过 UART 接口与外界相连最少只需要三条线TXD(发送)、RXD(接收)和 GND(地线)。图中就是 UART 的通信格式 图中各位的含义如下 空闲位 数据线在空闲状态的时候为逻辑“1”状态也就是高电平表示没有数据线空闲没有数据传输。 起始位 当要传输数据的时候先传输一个逻辑“0”也就是将数据线拉低表示开始数据传输。 数据位 数据位就是实际要传输的数据数据位数可选择 5~8 位我们一般都是按照字节传输数据的一个字节 8 位因此数据位通常是 8 位的。低位在前先传输高位最后传输。 奇偶校验位 这是对数据中“1”的位数进行奇偶校验用的可以不使用奇偶校验功能。 停止位 数据传输完成标志位停止位的位数可以选择 1 位、1.5 位或 2 位高电平一般都选择 1 位停止位。 波特率 波特率就是 UART 数据传输的速率也就是每秒传输的数据位数一般选择 9600、 19200、115200 等。 2、UART 电平标准 UART 一般的接口电平有 TTL 和 RS-232一般开发板上都有 TXD 和 RXD 这样的引脚这些引脚低电平表示逻辑 0高电平表示逻辑 1这个就是 TTL 电平。RS-232 采用差分线-3~-15V 表示逻辑 13~15V 表示逻辑 0。一般图中的接口就是 TTL 电平 图中的模块就是 USB 转 TTL 模块TTL 接口部分有 VCC、GND、RXD、TXD、RTS 和 CTS。RTS 和 CTS 基本用不到使用的时候通过杜邦线和其他模块的 TTL 接口相连即可。 RS-232 电平需要 DB9 接口I.MX6U-ALPHA 开发板上的 COM3(UART3)口就是 RS-232 接口的如图所示 由于现在的电脑都没有 DB9 接口了取而代之的是 USB 接口所以就催生出了很多 USB转串口 TTL 芯片比如 CH340、PL2303 等。通过这些芯片就可以实现串口 TTL 转 USB。I.MX6UALPHA 开发板就使用 CH340 芯片来完成 UART1 和电脑之间的连接只需要一条USB 线即可如图所示 2.2 I.MX6U UART 简介 I.MX6U 一共有 8 个 UART其主要特性如下 ①、兼容 TIA/EIA-232F 标准速度最高可到 5Mbit/S。 ②、支持串行 IR 接口兼容 IrDA最高可到 115.2Kbit/s。 ③、支持 9 位或者多节点模式(RS-485)。 ④、1 或 2 位停止位。 ⑤、可编程的奇偶校验(奇校验和偶校验)。 ⑥、自动波特率检测(最高支持 115.2Kbit/S)。 I.MX6U 的 UART 功能很多但是我们本节就只用到其最基本的串口功能关于 UART 其它功能的介绍请参考《I.MX6ULL 参考手册》第 3561 页的“Chapter 55 Universal Asynchronous Receiver/Transmitter(UART)”章节。 UART 的时钟源是由寄存器 CCM_CSCDR1 的 UART_CLK_SEL(bit)位来选择的当为 0 的时候 UART 的时钟源为 pll3_80m(80MHz)如果为 1 的时候 UART 的时钟源为 osc_clk(24M)一般选择 pll3_80m 作为 UART 的时钟源。 寄存器 CCM_CSCDR1 的 UART_CLK_PODF(bit5:0)位是 UART 的时钟分频值可设置 0~63分别对应 1~64 分频一般设置为 1 分频因此最终进入 UART 的时钟为 80MHz。 接下来看一下 UART 几个重要的寄存器第一个就是 UART 的控制寄存器 1即UARTx_UCR1(x1~8)此寄存器的结构如图所示 寄存器 UARTx_UCR1 我们用到的重要位如下 ADBR(bit14)自动波特率检测使能位为 0 的时候关闭自动波特率检测为 1 的时候使能自动波特率检测。 UARTEN(bit0)UART 使能位为 0 的时候关闭 UART为 1 的时候使能 UART。 接下来看一下 UART 的控制寄存器 2即UARTx_UCR2此寄存器结构如图所示 寄存器 UARTx_UCR2 用到的重要位如下 IRTS(bit14)为 0 的时候使用 RTS 引脚功能为 1 的时候忽略 RTS 引脚。 PREN(bit8)奇偶校验使能位为 0 的时候关闭奇偶校验为 1 的时候使能奇偶校验。 PROE(bit7)奇偶校验模式选择位开启奇偶校验以后此位如果为 0 的话就使用偶校验此位为 1 的话就使能奇校验。 STOP(bit6)停止位数量为 0 的话 1 位停止位为 1 的话 2 位停止位。 WS(bit5)数据位长度为 0 的时候选择 7 位数据位为 1 的时候选择 8 位数据位。 TXEN(bit2)发送使能位为 0 的时候关闭 UART 的发送功能为 1 的时候打开 UART的发送功能。 RXEN(bit1)接收使能位为 0 的时候关闭 UART 的接收功能为 1 的时候打开 UART的接收功能。 SRST(bit0)软件复位为 0 的是时候软件复位 UART为 1 的时候表示复位完成。复位完成以后此位会自动置 1表示复位完成。此位只能写 0写 1 会被忽略掉。 接下来看一下 UARTx_UCR3 寄存器此寄存器结构如图所示 本章实验就用到了寄存器 UARTx_UCR3 中的位 RXDMUXSEL(bit2)这个位应该始终为 1这个在《I.MX6ULL 参考手册》第 3624 页有说明。 接下来看一下寄存器 UARTx_USR2这个是 UART 的状态寄存器 2此寄存器结构如图所示 寄存器 UARTx_USR2 用到的重要位如下 TXDC(bit3)发送完成标志位为 1 的时候表明发送缓冲(TxFIFO)和移位寄存器为空也就是发送完成向 TxFIFO 写入数据此位就会自动清零。 RDR(bit0)数据接收标志位为 1 的时候表明至少接收到一个数据从寄存器UARTx_URXD 读取数据接收到的数据以后此位会自动清零。 接下来看一下寄存器 UARTx_UFCR 、 UARTx_UBIR 和 UARTx_UBMR 寄存器UARTx_UFCR 中我们要用到的是位 RFDIV(bit9:7)用来设置参考时钟分频设置如表示 通过这三个寄存器可以设置 UART 的波特率波特率的计算公式如下 Ref Freq经过分频以后进入 UART 的最终时钟频率。 UBMR寄存器 UARTx_UBMR 中的值。 UBIR寄存器 UARTx_UBIR 中的值。 通过 UARTx_UFCR 的 RFDIV 位、UARTx_UBMR 和 UARTx_UBIR 这三者的配合即可得到我们想要的波特率。比如现在要设置 UART 波特率为 115200那么可以设置 RFDIV 为5(0b101)也就是 1 分频因此 Ref Freq80MHz。设置 UBIR71UBMR3124根据上面的公式可以得到 最后来看一下寄存器 UARTx_URXD 和 UARTx_UTXD这两个寄存器分别为 UART 的接收和发送数据寄存器这两个寄存器的低八位为接收到的和要发送的数据。读取寄存器UARTx_URXD 即可获取到接收到的数据如果要通过 UART 发送数据直接将数据写入到寄存器 UARTx_UTXD 即可。 关于 UART 的寄存器就介绍到这里关于这些寄存器详细的描述请参考《I.MX6ULL 参考手册》第 3608 页的 55.15 小节。本节我们使用 I.MX6U 的 UART1 来完成开发板与电脑串口调试助手之间串口通信 UART1 的配置步骤如下 1、设置 UART1 的时钟源 设置 UART 的时钟源为 pll3_80m设置寄存器 CCM_CSCDR1 的 UART_CLK_SEL 位为 0即可。 2、初始化 UART1 初始化 UART1 所使用 IO设置 UART1 的寄存器 UART1_UCR1~UART1_UCR3设置内容包括波特率奇偶校验、停止位、数据位等等。 3、使能 UART1 UART1 初始化完成以后就可以使能 UART1 了设置寄存器 UART1_UCR1 的位 UARTEN为 1。 4、编写 UART1 数据收发函数 编写两个函数用于 UART1 的数据收发操作。 三、硬件原理分析 本试验用到的资源如下 ①、一个 LED 灯LED0。 ②、串口 1。 LED硬件原理图参考 在做实验之前需要用 USB 串口线将串口 1 和电脑连接起来并且还需要设置 JP5 跳线帽将串口 1 的 RXD、TXD 两个引脚分别与 P116、P117 连接一起如图所示 硬件连接设置好以后就可以开始软件编写了本节实验我们初始化好 UART1然后等待SecureCRT 给开发板发送一个字节的数据开发板接收到 SecureCRT 发送过来的数据以后在同通过串口 1 发送给 SecureCRT。 四、实验程序编写 本节实验在该文章的基础上完成更改工程名字为“uart”然后在 bsp 文件夹下创建名为“uart”的文件夹然后在 bsp/uart 中新建 bsp_uart.c 和 bsp_uart.h 这两个文件。在 bsp_uart.h中输入如下内容 1 #ifndef _BSP_UART_H 2 #define _BSP_UART_H 3 #include imx6ul.h 15 /* 函数声明 */ 16 void uart_init(void); 17 void uart_io_init(void); 18 void uart_disable(UART_Type *base); 19 void uart_enable(UART_Type *base); 20 void uart_softreset(UART_Type *base); 21 void uart_setbaudrate(UART_Type *base, unsigned int baudrate, unsigned int srcclock_hz); 22 void putc(unsigned char c); 23 void puts(char *str); 24 unsigned char getc(void); 25 void raise(int sig_nr); 26 27 #endif文件 bsp_uart.h 内容很简单就是一些函数声明。继续在文件 bsp_uart.c 中输入如下所示内容 1 #include bsp_uart.h 2 3 /* 4 * description : 初始化串口 1,波特率为 115200 5 * param : 无 6 * return : 无 7 */ 8 void uart_init(void) 9 { 10 /* 1、初始化串口 IO */ 11 uart_io_init(); 12 13 /* 2、初始化 UART1 */ 14 uart_disable(UART1); /* 先关闭 UART1 */ 15 uart_softreset(UART1); /* 软件复位 UART1 */ 16 17 UART1-UCR1 0; /* 先清除 UCR1 寄存器 */ 18 UART1-UCR1 ~(114); /* 关闭自动波特率检测 */ 19 20 /* 21 * 设置 UART 的 UCR2 寄存器设置字长停止位校验模式关闭硬件流控 22 * bit14: 1 忽略 RTS 引脚 23 * bit8: 0 关闭奇偶校验 24 * bit6: 0 1 位停止位 25 * bit5: 1 8 位数据位 26 * bit2: 1 打开发送 27 * bit1: 1 打开接收 28 */ 29 UART1-UCR2 | (114) | (15) | (12) | (11); 30 UART1-UCR3 | 12; /* UCR3 的 bit2 必须为 1 */ 31 32 /* 33 * 设置波特率 34 * 波特率计算公式:Baud Rate Ref Freq / (16 * (UBMR 1)/(UBIR1)) 35 * 如果要设置波特率为 115200那么可以使用如下参数: 36 * Ref Freq 80M 也就是寄存器 UFCR 的 bit9:7101, 表示 1 分频 37 * UBMR 3124 38 * UBIR 71 39 * 因此波特率 80000000/(16 * (31241)/(711)) 40 * 80000000/(16 * 3125/72) 41 * (80000000*72) / (16*3125) 42 * 115200 43 */ 44 UART1-UFCR 57; /* ref freq 等于 ipg_clk/180Mhz */ 45 UART1-UBIR 71; 46 UART1-UBMR 3124; 47 48 #if 0 49 uart_setbaudrate(UART1, 115200, 80000000); /* 设置波特率 */ 50 #endif 51 52 uart_enable(UART1); /* 使能串口 */ 53 } 54 55 /* 56 * description : 初始化串口 1 所使用的 IO 引脚 57 * param : 无 58 * return : 无 59 */ 60 void uart_io_init(void) 61 { 62 /* 1、初始化串口 IO 63 * UART1_RXD - UART1_TX_DATA 64 * UART1_TXD - UART1_RX_DATA 65 */ 66 IOMUXC_SetPinMux(IOMUXC_UART1_TX_DATA_UART1_TX, 0); 67 IOMUXC_SetPinMux(IOMUXC_UART1_RX_DATA_UART1_RX, 0); 68 IOMUXC_SetPinConfig(IOMUXC_UART1_TX_DATA_UART1_TX, 0x10B0); 69 IOMUXC_SetPinConfig(IOMUXC_UART1_RX_DATA_UART1_RX, 0x10B0); 70 } 71 72 /* 73 * description : 波特率计算公式 74 * 可以用此函数计算出指定串口对应的 UFCR 75 * UBIR 和 UBMR 这三个寄存器的值 76 * param - base : 要计算的串口。 77 * param - baudrate : 要使用的波特率。 78 * param - srcclock_hz : 串口时钟源频率单位 Hz 79 * return : 无 80 */ 81 void uart_setbaudrate(UART_Type *base, unsigned int baudrate, unsigned int srcclock_hz) 82 { 83 uint32_t numerator 0u; 84 uint32_t denominator 0U; 85 uint32_t divisor 0U; 86 uint32_t refFreqDiv 0U; 87 uint32_t divider 1U; 88 uint64_t baudDiff 0U; 89 uint64_t tempNumerator 0U; 90 uint32_t tempDenominator 0u; 91 92 /* get the approximately maximum divisor */ 93 numerator srcclock_hz; 94 denominator baudrate 4; 95 divisor 1; 96 97 while (denominator ! 0) 98 { 99 divisor denominator; 100 denominator numerator % denominator; 101 numerator divisor; 102 } 103 104 numerator srcclock_hz / divisor; 105 denominator (baudrate 4) / divisor; 106 107 /* numerator ranges from 1 ~ 7 * 64k */ 108 /* denominator ranges from 1 ~ 64k */ 109 if ((numerator (UART_UBIR_INC_MASK * 7)) || (denominator UART_UBIR_INC_MASK)) 110 { 111 uint32_t m (numerator - 1) / (UART_UBIR_INC_MASK * 7) 1; 112 uint32_t n (denominator - 1) / UART_UBIR_INC_MASK 1; 113 uint32_t max m n ? m : n; 114 numerator / max; 115 denominator / max; 116 if (0 numerator) 117 { 118 numerator 1; 119 } 120 if (0 denominator) 121 { 122 denominator 1; 123 } 124 } 125 divider (numerator - 1) / UART_UBIR_INC_MASK 1; 126 127 switch (divider) 128 { 129 case 1: 130 refFreqDiv 0x05; 131 break; 132 case 2: 133 refFreqDiv 0x04; 134 break; 135 case 3: 136 refFreqDiv 0x03; 137 break; 138 case 4: 139 refFreqDiv 0x02; 140 break; 141 case 5: 142 refFreqDiv 0x01; 143 break; 144 case 6: 145 refFreqDiv 0x00; 146 break; 147 case 7: 148 refFreqDiv 0x06; 149 break; 150 default: 151 refFreqDiv 0x05; 152 break; 153 } 154 /* Compare the difference between baudRate_Bps and calculated 155 * baud rate. Baud Rate Ref Freq / (16 * (UBMR 1)/(UBIR1)). 156 * baudDiff (srcClock_Hz/divider)/( 16 * ((numerator / divider)/ denominator). 157 */ 158 tempNumerator srcclock_hz; 159 tempDenominator (numerator 4); 160 divisor 1; 161 /* get the approximately maximum divisor */ 162 while (tempDenominator ! 0) 163 { 164 divisor tempDenominator; 165 tempDenominator tempNumerator % tempDenominator; 166 tempNumerator divisor; 167 } 168 tempNumerator srcclock_hz / divisor; 169 tempDenominator (numerator 4) / divisor; 170 baudDiff (tempNumerator * denominator) / tempDenominator; 171 baudDiff (baudDiff baudrate) ? (baudDiff - baudrate) : (baudrate - baudDiff); 172 173 if (baudDiff (baudrate / 100) * 3) 174 { 175 base-UFCR ~UART_UFCR_RFDIV_MASK; 176 base-UFCR | UART_UFCR_RFDIV(refFreqDiv); 177 base-UBIR UART_UBIR_INC(denominator - 1); 178 base-UBMR UART_UBMR_MOD(numerator / divider - 1); 179 } 180 } 181 182 /* 183 * description : 关闭指定的 UART 184 * param – base : 要关闭的 UART 185 * return : 无 186 */ 187 void uart_disable(UART_Type *base) 188 { 189 base-UCR1 ~(10); 190 } 191 192 /* 193 * description : 打开指定的 UART 194 * param – base : 要打开的 UART 195 * return : 无 196 */ 197 void uart_enable(UART_Type *base) 198 { 199 base-UCR1 | (10); 200 } 201 202 /* 203 * description : 复位指定的 UART 204 * param – base : 要复位的 UART 205 * return : 无 206 */ 207 void uart_softreset(UART_Type *base) 208 { 209 base-UCR2 ~(10); /* 复位 UART */ 210 while((base-UCR2 0x1) 0); /* 等待复位完成 */ 211 } 212 213 /* 214 * description : 发送一个字符 215 * param - c : 要发送的字符 216 * return : 无 217 */ 218 void putc(unsigned char c) 219 { 220 while(((UART1-USR2 3) 0X01) 0);/* 等待上一次发送完成 */ 221 UART1-UTXD c 0XFF; /* 发送数据 */ 222 } 223 224 /* 225 * description : 发送一个字符串 226 * param - str : 要发送的字符串 227 * return : 无 228 */ 229 void puts(char *str) 230 { 231 char *p str; 232 233 while(*p) 234 putc(*p); 235 } 236 237 /* 238 * description : 接收一个字符 239 * param : 无 240 * return : 接收到的字符 241 */ 242 unsigned char getc(void) 243 { 244 while((UART1-USR2 0x1) 0); /* 等待接收完成 */ 245 return UART1-URXD; /* 返回接收到的数据 */ 246 } 247 248 /* 249 * description : 防止编译器报错 250 * param : 无 251 * return : 无 252 */ 253 void raise(int sig_nr) 254 { 255 256 }文件 bsp_uart.c 中共有 10 个函数我们依次来看一下这些函数都是做什么的第一个函数是 uart_init这个函数是 UART1 初始化函数用于初始化 UART1 相关的 IO、并且设置 UART1 的波特率、字长、停止位和校验模式等初始化完成以后就使能 UART1。 第二个函数是uart_io_init用于初始化 UART1 所使用的 IO。 第三个函数是 uart_setbaudrate这个函数是从NXP 官方的 SDK 包里面移植过来的用于设置波特率。我们只需将要设置的波特率告诉此函数此函数就会使用逐次逼近方式来计算出寄存器 UART1_UFCR 的 FRDIV 位、寄存器UART1_UBIR 和寄存器 UART1_UBMR 这三个的值。 第四和第五这两个函数为 uart_disable 和uart_enable分别是使能和关闭 UART1。 第 6 个函数是 uart_softreset用于软件复位指定的 UART。 第七个函数是putc用于通过UART1发送一个字节的数据。 第八个函数是puts用于通过UART1发送一串数据。 第九个函数是 getc用于通过 UART1 获取一个字节的数据 最后一个函数是raise这是一个空函数防止编译器报错。 最后在 main.c 中输入如下所示内容 1 #include bsp_clk.h 2 #include bsp_delay.h 3 #include bsp_led.h 4 #include bsp_beep.h 5 #include bsp_key.h 6 #include bsp_int.h 7 #include bsp_uart.h 8 9 /* 10 * description : main 函数 11 * param : 无 12 * return : 无 13 */ 14 int main(void) 15 { 16 unsigned char a0; 17 unsigned char state OFF; 18 19 int_init(); /* 初始化中断(一定要最先调用) */ 20 imx6u_clkinit(); /* 初始化系统时钟 */ 21 delay_init(); /* 初始化延时 */ 22 clk_enable(); /* 使能所有的时钟 */ 23 led_init(); /* 初始化 led */ 24 beep_init(); /* 初始化 beep */ 25 uart_init(); /* 初始化串口波特率 115200 */ 26 27 while(1) 28 { 29 puts(请输入 1 个字符:); 30 agetc(); 31 putc(a); /* 回显功能 */ 32 puts(\r\n); 33 34 /* 显示输入的字符 */ 35 puts(您输入的字符为:); 36 putc(a); 37 puts(\r\n\r\n); 38 39 state !state; 40 led_switch(LED0,state); 41 } 42 return 0; 43 }第 5 行调用函数 uart_init 初始化 UART1最终在 while 循环里面获取串口接收到的数据并且将获取到的数据通过串口打印出来。 五、编译下载验证 5.1编写 Makefile 和链接脚本 在 Makefile 文件中输入如下内容 1 CROSS_COMPILE ? arm-linux-gnueabihf- 2 TARGET ? uart 3 4 CC : $(CROSS_COMPILE)gcc 5 LD : $(CROSS_COMPILE)ld 6 OBJCOPY : $(CROSS_COMPILE)objcopy 7 OBJDUMP : $(CROSS_COMPILE)objdump 8 9 LIBPATH : -lgcc -L /usr/local/arm/gcc-linaro-4.9.4-2017.01- x86_64_arm-linux-gnueabihf/lib/gcc/arm-linux-gnueabihf/4.9.4 10 11 12 INCDIRS : imx6ul \ 13 bsp/clk \ 14 bsp/led \ 15 bsp/delay \ 16 bsp/beep \ 17 bsp/gpio \ 18 bsp/key \ 19 bsp/exit \ 20 bsp/int \ 21 bsp/epittimer \ 22 bsp/keyfilter \ 23 bsp/uart 24 25 SRCDIRS : project \ 26 bsp/clk \ 27 bsp/led \ 28 bsp/delay \ 29 bsp/beep \ 30 bsp/gpio \ 31 bsp/key \ 32 bsp/exit \ 33 bsp/int \ 34 bsp/epittimer \ 35 bsp/keyfilter \ 36 bsp/uart 37 38 39 INCLUDE : $(patsubst %, -I %, $(INCDIRS)) 40 41 SFILES : $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.S)) 42 CFILES : $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.c)) 43 44 SFILENDIR : $(notdir $(SFILES)) 45 CFILENDIR : $(notdir $(CFILES)) 46 47 SOBJS : $(patsubst %, obj/%, $(SFILENDIR:.S.o)) 48 COBJS : $(patsubst %, obj/%, $(CFILENDIR:.c.o)) 49 OBJS : $(SOBJS) $(COBJS) 50 51 VPATH : $(SRCDIRS) 52 53 .PHONY: clean 54 55 $(TARGET).bin : $(OBJS) 56 $(LD) -Timx6ul.lds -o $(TARGET).elf $^ $(LIBPATH) 57 $(OBJCOPY) -O binary -S $(TARGET).elf $ 58 $(OBJDUMP) -D -m arm $(TARGET).elf $(TARGET).dis 59 60 $(SOBJS) : obj/%.o : %.S 61 $(CC) -Wall -nostdlib -fno-builtin -c -O2 $(INCLUDE) -o $ $ 62 63 $(COBJS) : obj/%.o : %.c 64 $(CC) -Wall -nostdlib -fno-builtin -c -O2 $(INCLUDE) -o $ $ 65 66 clean: 67 rm -rf $(TARGET).elf $(TARGET).dis $(TARGET).bin $(COBJS) $(SOBJS)上述的 Makefile 文件内容和该文章的区别不大。 将 TARGET 为 uart在 INCDIRS 和SRCDIRS 中加入“bsp/uart”。但是相比上一章中的 Makefile 文件本章实验的 Makefile 有两处重要的改变 ①、本章 Makefile 文件在链接的时候加入了数学库 因为在 bsp_uart.c 中有个函数uart_setbaudrate在此函数中使用到了除法运算因此在链接的时候需要将编译器的数学库也链接进来。第9行的变量LIBPATH就是数学库的目录在第56行链接的时候使用了变量LIBPATH。在后面的学习中我们常常要用到一些第三方库那么在连接程序的时候就需要指定这些第三方库所在的目录Makefile 在链接的时候使用选项“-L”来指定库所在的目录比如“示例代码中第 9 行的变量 LIBPATH 就是指定了我们所使用的编译器库所在的目录。 ②、在第 61 行和 64 行中加入了选项“-fno-builtin”否则编译的时候提示“putc”、“puts”这两个函数与内建函数冲突错误信息如下所示 warning: conflicting types for built-in function ‘putc’ warning: conflicting types for built-in function ‘puts’在编译的时候加入选项“-fno-builtin”表示不使用内建函数这样我们就可以自己实现 putc 和 puts 这样的函数了。 链接脚本保持不变。 5.2 编译下载 使用 Make 命令编译代码编译成功以后使用软件 imxdownload 将编译完成的 uart.bin 文件 下载到 SD 卡中命令如下 chmod 777 imxdownload //给予 imxdownload 可执行权限一次即可 ./imxdownload uart.bin /dev/sdd //烧写到 SD 卡中不能烧写到/dev/sda 或 sda1 设备里面烧写成功以后将 SD 卡插到开发板的 SD 卡槽中然后复位开发板。打开 SourceCRT点击 File-Quick Connect…打开快速连接设置界面设置好相应的串口参数比如在我的电脑上是COM8插上你的开发板到电脑上你电脑噔噔的声音响查看你多了那个端口就是COM几 设置如图所示 设置好以后就点击“Connect”就可以了连接成功以后 SecureCRT 收到来自开发板的数据但是 SecureCRT 显示可能会是乱码如图所示 这是因为有些设置还没做点击 Options-Session Options…打开会话设置窗口按照图所示设置 设置好以后点击“OK”按钮就可以了清屏然后重新复位一次开发板此时 SecureCRT显示就正常了如图所示 根据提示输入一个字符这个输入的字符就会通过串口发送给开发板开发板接收到字符 以后就会通过串口提示你接收到的字符是什么如图所示 至此I.MX6U 的串口 1 就工作起来了以后我们就可以通过串口来调试程序。 END
http://www.yayakq.cn/news/1502/

相关文章:

  • 网站建设基本流程价格域名注册后 免费自建网站
  • 做网站有没有效果wordpress优化seo
  • 浙江网站改版设计公司团购网站 设计方案
  • 手机网站怎样做网站建设网页的长宽
  • 北京建设官方网站seo技巧课程
  • 深圳地铁建设集团网站桂阳做网站的软件定制开发外包
  • 乐清建设路小学网站常州企业网页制作
  • 做网站机构图用什么工具多店铺商城系统开发
  • 怎么用阿里云做网站聊城市公司网站建站
  • 性价比最高的网站建设公司wordpress网站加载慢
  • 企业网站建设的目的有()更新网站 是否要重启iis
  • 怎样做问卷网站网易企业邮箱服务器怎么设置
  • 神农架网站建设成都制作网页设计
  • 六安电商网站建设价格广告设计公司营业执照
  • 网站建设招标公示国外客户推广网站
  • 做盗版网站会怎样静态网站怎么做
  • 商城建设网站制作濮阳做网站多少钱
  • 成都网站设计定制学校英文版网站建设
  • 京东云wordpress后台深圳搜索seo优化排名
  • 无锡专业网站建设深圳门户网站有哪些
  • 怎样给网站做外链哪里可以做产品购物网站
  • 临平建设局网站绵阳市三台县城乡建设局网站
  • 企业关键词排名优化哪家好邱县seo整站排名
  • 西宁个人网站建设广告网站模板免费下载
  • 网站 可以做无形资产吗年报是否就是在工商网站做的
  • 做高端品牌网站深圳尼高品牌设计
  • 网站做推广团队网站的建设需要数据库
  • 好建网站建设工程立项在哪个网站查询
  • 网站退出率是什么意思部队内网网站建设方案
  • 用插件做网站成都旅游必去景点有哪些