STM32串口通讯实现——USB转串口

阅读: 评论:0

STM32串⼝通讯实现——USB转串⼝
⼀、RS232,TTL简介
RS232是个⼈计算机的通讯接⼝之⼀,⼀般会有两组RS323接⼝,分别为COM1和COM2,电平标准为+12V为逻辑负,-12为逻辑正。TTL电平为5V为逻辑正,0为逻辑负,这样的数据通信及电平规定⽅式,被称做TTL(晶体管-晶体管逻辑电平)信号系统。这是计算机处理器控制的设备内部各部分之间通信的标准技术。
⼆、串⼝通讯原理
了解了RS232和TTL两种通信标准后,就可以开始了解串⼝通信USART了。
UART :通⽤异步收发传输器,它将要传输的资料在串⾏通信与并⾏通信之间加以转换。作为把并⾏输⼊信号转成串⾏输出信号的芯⽚。同样它是串⾏通信接⼝ UART只有数据线收和发,并⽆时钟线,故为异步串⾏通信接⼝,可以实现全双⼯传输和接收;在嵌⼊式中,常⽤与上位机与外设通信。
电汽锅串⼝通信的概念⾮常简单,串⼝按位发送和接收字节。尽管⽐按字节的并⾏通信慢,但是串⼝可以在使⽤⼀根线发送数据的同时⽤另⼀根线接收数据。它很简单并且能够实现远距离通信。⼀般来说有3种串⼝通讯⽅式。
1. 两设备通过232标准通讯
⽤控制器发出TTL电平,然后经过电平转换芯⽚转换为RS232电平,然后通过D89接⼝进⾏通讯
2. ⽤USB转串⼝进⾏通讯
⽤控制器发出TTL电平,然后经过电平转换芯⽚转换,然后通过USB接⼝和USB转串⼝进⾏通讯,需要安装CH340驱动。本博客就主要针对这种⽅式进⾏串⼝通讯。
3. TTL电平之间直接通讯
不需要控制器和转换芯⽚,直接使⽤TTL电平进⾏通讯。
三、⽣成⽂件
1.建⽴⼯程
打开Keil5软件,新建⼀个⼯程,然后添加⼀个.s⽂件,点击魔法棒选择Output选项,勾选Creat Hex File。
2.输⼊代码
在.s⽂件当中输⼊以下代码,代码是在别⼈的博客当中复制的。
;RCC寄存器地址映像
RCC_BASE            EQU    0x40021000
RCC_CR              EQU(RCC_BASE +0x00)
RCC_CFGR            EQU(RCC_BASE +0x04)
RCC_CIR            EQU(RCC_BASE +0x08)
RCC_APB2RSTR        EQU(RCC_BASE +0x0C)
RCC_APB1RSTR        EQU(RCC_BASE +0x10)
RCC_AHBENR          EQU(RCC_BASE +0x14)
RCC_APB2ENR        EQU(RCC_BASE +0x18)
RCC_APB1ENR        EQU(RCC_BASE +0x1C)
RCC_BDCR            EQU(RCC_BASE +0x20)
RCC_CSR            EQU(RCC_BASE +0x24)
;AFIO寄存器地址映像
AFIO_BASE          EQU    0x40010000
AFIO_EVCR          EQU(AFIO_BASE +0x00)
AFIO_MAPR          EQU(AFIO_BASE +0x04)
AFIO_EXTICR1        EQU(AFIO_BASE +0x08)
AFIO_EXTICR2        EQU(AFIO_BASE +0x0C)
AFIO_EXTICR3        EQU(AFIO_BASE +0x10)
AFIO_EXTICR4        EQU(AFIO_BASE +0x14)
;
GPIOA寄存器地址映像
;GPIOA寄存器地址映像
GPIOA_BASE          EQU    0x40010800
GPIOA_CRL          EQU(GPIOA_BASE +0x00)
GPIOA_CRH          EQU(GPIOA_BASE +0x04) GPIOA_IDR          EQU(GPIOA_BASE +0x08)
GPIOA_ODR          EQU(GPIOA_BASE +0x0C) GPIOA_BSRR          EQU(GPIOA_BASE +0x10) GPIOA_BRR          EQU(GPIOA_BASE +0x14) GPIOA_LCKR          EQU(GPIOA_BASE +0x18)
;GPIO C⼝控制
GPIOC_BASE          EQU    0x40011000
GPIOC_CRL          EQU(GPIOC_BASE +0x00) GPIOC_CRH          EQU(GPIOC_BASE +0x04) GPIOC_IDR          EQU(GPIOC_BASE +0x08)
GPIOC_ODR          EQU(GPIOC_BASE +0x0C) GPIOC_BSRR          EQU(GPIOC_BASE +0x10) G
PIOC_BRR          EQU(GPIOC_BASE +0x14) GPIOC_LCKR          EQU(GPIOC_BASE +0x18)
;串⼝1控制
USART1_BASE        EQU    0x40013800
USART1_SR          EQU(USART1_BASE +0x00) USART1_DR          EQU(USART1_BASE +0x04) USART1_BRR          EQU(USART1_BASE +0x08) USART1_CR1          EQU(USART1_BASE +0x0c) USART1_CR2          EQU(USART1_BASE +0x10) USART1_CR3          EQU(USART1_BASE +0x14) USART1_GTPR        EQU(USART1_BASE +0x18)
;NVIC寄存器地址
NVIC_BASE          EQU    0xE000E000
NVIC_SETEN          EQU(NVIC_BASE +0x0010)
;SETENA寄存器阵列的起始地址
NVIC_IRQPRI        EQU(NVIC_BASE +0x0400)
中断优先级寄存器阵列的起始地址
NVIC_VECTTBL        EQU(NVIC_BASE +0x0D08)
;向量表偏移寄存器的地址
NVIC_AIRCR          EQU(NVIC_BASE +0x0D0C)
;应⽤程序中断及复位控制寄存器的地址
SETENA0            EQU    0xE000E100
SETENA1            EQU    0xE000E104
;SysTick寄存器地址
SysTick_BASE        EQU    0xE000E010
SYSTICKCSR          EQU(SysTick_BASE +0x00) SYSTICKRVR          EQU(SysTick_BASE +0x04)
;FLASH缓冲寄存器地址映像
FLASH_ACR          EQU    0x40022000
;SCB_BASE          EQU(SCS_BASE +0x0D00)
MSP_TOP            EQU    0x20005000
废水处理有机系统
;主堆栈起始值
PSP_TOP            EQU    0x20004E00
;进程堆栈起始值
BitAlias_BASE      EQU    0x22000000
;位带别名区起始地址
Flag1              EQU    0x20000200
b_flas              EQU(BitAlias_BASE +(0x200*32)+(0*4)) ;位地址
b_05s              EQU(BitAlias_BASE +(0x200*32)+(1*4)) ;位地址
DlyI                EQU    0x20000204
DlyJ                EQU    0x20000208
DlyK                EQU    0x2000020C
SysTim              EQU    0x20000210
;常数定义
Bit0                EQU    0x00000001
Bit1                EQU    0x00000002
Bit2                EQU    0x00000004
Bit3                EQU    0x00000008
Bit4                EQU    0x00000010
Bit5                EQU    0x00000020广告宣传栏制作
Bit6                EQU    0x00000040
Bit7                EQU    0x00000080
Bit8                EQU    0x00000100
Bit9                EQU    0x00000200
Bit10              EQU    0x00000400
Bit11              EQU    0x00000800
Bit12              EQU    0x00001000
Bit13              EQU    0x00002000
Bit14              EQU    0x00004000
Bit15              EQU    0x00008000
Bit16              EQU    0x00010000
Bit17              EQU    0x00020000
Bit18              EQU    0x00040000
Bit19              EQU    0x00080000
Bit20              EQU    0x00100000
Bit21              EQU    0x00200000
Bit22              EQU    0x00400000
Bit23              EQU    0x00800000
Bit24              EQU    0x01000000
Bit25              EQU    0x02000000
Bit26              EQU    0x04000000
Bit27              EQU    0x08000000
Bit28              EQU    0x10000000
Bit29              EQU    0x20000000
Bit30              EQU    0x40000000
Bit31              EQU    0x80000000
晶体石膏灯;向量表
AREA RESET, DATA, READONLY
DCD    MSP_TOP            ;初始化主堆栈
DCD    Start              ;复位向量
DCD    NMI_Handler        ;NMI Handler
DCD    HardFault_Handler  ;Hard Fault Handler    DCD    0
DCD    0
DCD    0
DCD    0
DCD    0
DCD    0
DCD    0
DCD    0
DCD    0
DCD    0
DCD    0
DCD    SysTick_Handler    ;SysTick Handler
SPACE  20;预留空间20字节
代码段
挤压成型AREA |.text|, CODE, READONLY
;主程序开始
ENTRY
;指⽰程序从这⾥开始执⾏
Start
;时钟系统设置金属手铐脚镣
ldr    r0,=RCC_CR
ldr    r1,[r0]
orr    r1, #Bit16
str    r1,[r0]
开启外部晶振使能
;启动外部8M晶振
ClkOk
ldr    r1,[r0]
ands  r1, #Bit17
beq    ClkOk
;等待外部晶振就绪
ldr    r1,[r0]
orr    r1,#Bit17
str    r1,[r0]
;FLASH缓冲器
ldr    r0,=FLASH_ACR
mov    r1, #0x00000032
str    r1,[r0]
;设置PLL锁相环倍率为7,HSE输⼊不分频
ldr    r0,=RCC_CFGR
ldr    r1,[r0]
orr    r1, #(Bit18 :OR: Bit19 :OR: Bit20 :OR: Bit16 :OR: Bit14)    orr    r1, #Bit10
str    r1,[r0]
;启动PLL锁相环
ldr    r0,=RCC_CR
ldr    r1,[r0]
orr    r1, #Bit24
str    r1,[r0]
PllOk
ldr    r1,[r0]
ands  r1, #Bit25
beq    PllOk
;选择PLL时钟作为系统时钟
ldr    r0,=RCC_CFGR
ldr    r1,[r0]
orr    r1, #(Bit18 :OR: Bit19 :OR: Bit20 :OR: Bit16 :OR: Bit14)    orr    r1, #Bit10
orr    r1, #Bit1
str    r1,[r0]
;其它RCC相关设置
ldr    r0,=RCC_APB2ENR
mov    r1, #(Bit14 :OR: Bit4 :OR: Bit2)
str    r1,[r0]
;IO端⼝设置
ldr    r0,=GPIOC_CRL
ldr    r1,[r0]
orr    r1, #(Bit28 :OR: Bit29)
;PC.7输出模式,最⼤速度50MHz
and    r1, #(~Bit30 &~Bit31)
;
PC.7通⽤推挽输出模式
str    r1,[r0]
;PA9串⼝0发射脚
ldr    r0,=GPIOA_CRH
ldr    r1,[r0]
orr    r1, #(Bit4 :OR: Bit5)
;PA.9输出模式,最⼤速度50MHz
orr    r1, #Bit7
and    r1, #~Bit6
;10:复⽤功能推挽输出模式
str    r1,[r0]
ldr    r0,=USART1_BRR
mov    r1, #0x271
str    r1,[r0]
;配置波特率->115200
ldr    r0,=USART1_CR1
mov    r1, #0x200c
str    r1,[r0]
;USART模块总使能发送与接收使能;710200002c 200000
;AFIO 参数设置
;Systick 参数设置
ldr    r0,=SYSTICKRVR
;
Systick装初值
mov    r1, #9000
str    r1,[r0]
ldr    r0,=SYSTICKCSR
;设定,启动Systick
mov    r1, #0x03
str    r1,[r0]
;NVIC
;ldr  r0,=SETENA0
;mov  r1,0x00800000
;str  r1,[r0]
;
ldr  r0,=SETENA1
;mov  r1, #0x00000100
;str  r1,[r0]
;切换成⽤户级线程序模式
ldr    r0,=PSP_TOP
;初始化线程堆栈
msr    psp, r0
mov    r0, #3
msr    control, r0
;初始化SRAM寄存器
mov    r1, #0
ldr    r0,=Flag1
str    r1,[r0]
ldr    r0,=DlyI
str    r1,[r0]
ldr    r0,=DlyJ
str    r1,[r0]
ldr    r0,=DlyK
str    r1,[r0]
ldr    r0,=SysTim
str    r1,[r0]
;主循环

本文发布于:2023-06-11 12:15:26,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/2/134787.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:电平   地址   寄存器   转换   模式
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图