基于STM32实现串口通信输出hello windows!
文章目录
- 前言
- 一、介绍
- 1、串口协议和RS-232、485标准
- 2、RS232、485电平与TTL电平的区别
- 3、USB/TTL转232模块的工作原理
- 二、安装
- 1、安装STM32CubeMX
- 2、安装HAL库
- 三、流水灯
- (一)C语言HAL库实现流水灯
- 1、新建项目
- 2、keil仿真调试
- 3、观察GPIO端口的输出波形
- 4、烧录程序
- (二)、用寄存器方式实现点亮流水灯
- 1、项目创建
- 2、编写代码
- 3、编译程序
- 四、串口通信
- (一)HAL库实现
- 1、仪器选择和接口设置
- 2、创建项目
- 3、编写代码
- 4、烧录程序
- 5、串口调试
- 6、观察波形
- (二)寄存器实现
- 1、keil创建项目
- 2、编写hello.s文件
- 3、烧录程序
- 4、观察波形
- 五、总结
- 六、参考资料
前言
计算机通信就是将计算机和通信技术相结合,完成计算机与外部设备或计算机与计算机之间的信息交换。
一、介绍
1、串口协议和RS-232、485标准
串口通信协议 串口通信的基本原理. 串口 在嵌入式系统当中是一类重要的数据通信接口,其本质功能是作为 CPU 和串行设备间的编码 转换器 。. 当数据从 CPU 经过串行端口发送出去时,字节数据转换为串行的位;在接收数据时,串行的位被转换为字节数据。. 应用程序要使用串口进行通信,必须在使用之前向操作系统提出资源申请要求(打开串口),通信完成后必须释放资源(关闭串口)。
RS-232、RS-422、RS-485都是串行数据接口标准,USB也属于串行接口标准。 USB是我们经常用到的接口,而工控领域已经基本被RS-232、RS-422、RS-485占领了,逐渐演变成了工控领域的输血管道。
1、RS232接口的电气特征
在RS-232-C中任何一条信号线的电压均为负逻辑关系。即:逻辑“1”为-3到-15V;逻辑“0”为+3到+15V。RS-232-C接口连接器一般使用型号为DB-9插头座,通常插头在DCE端,插座在DTE端。PC机的RS-232口为9芯针插座。一些设备与PC机连接的RS-232接口,因为不使用对方的传送控制信号,只需要三条接口线,即“发送数据TXD”、“接收数据RXD”和“信号地GND”。RS-232传输线采用屏蔽双绞线。
2、RS485的电气特性
RS485采用差分信号负逻辑,逻辑"1”以两线间的电压差为-(26)V表示;逻辑"0"以两线间的电压差为+(26)V表示。接口信号电平比RS-232-C降低了,就不易损坏接口电路的芯片,且该电平与TTL电平兼容,可方便与TTL电路连接。RS-485的数据最高传输速率为10Mbps。
3、TTL电平
TTL电平信号被利用的最多是因为通常数据表示采用二进制规定,+5V等价于逻辑“1”,0V等价于逻辑“0”,这被称做TTL(晶体管-晶体管逻辑电平)信号系统,这是计算机处理器控制的设备内部各部分之间通信的标准技术。
2、RS232、485电平与TTL电平的区别
RS232、RS485、TTL是指电平标准(电信号)。
TTL电平标准 是 低电平为0,高电平为1(对地,标准数字电路逻辑)。
RS232电平标准 是 正电平为0,负电平为1(对地,正负6-15V皆可,甚至可以用高阻态)。
RS485与RS232类似,但是采用差分信号逻辑,更适合长距离、高速传输。
3、USB/TTL转232模块的工作原理
以CH340芯片模块为例
CH340C USB转TTL模块以CH340C芯片为核心,内部自带晶振,最高波特率可达2Mbps,软件兼容CH341驱动,过流保护,引出相应的通讯接口与电源接口,通讯接口带有指示灯指示工作状态,通讯稳定,体积小。
全速USB驱动,兼容USB2.0
硬件全双工串口,内置收发缓冲区
支持波特率50bps~2Mbps
输出TTL电平3.3V,兼容5V的IO电平
二、安装
1、安装STM32CubeMX
安装STM32CubeMX
BD云: https://pan.baidu.com/s/1yKgxQk2vxyqAy4CrGHZYzA?pwd=8m4m 提取: 8m4m
1、打开安装包,准备安装
2、勾选同意选项,并点击下一步
3、勾选第一项即可,第二项是是否同意ST公司收集个人用户信息等,点击下一步
4、修改路径,点击下一步
若没有相应文件,则点击确定创建文件
5、无需设置,点击下一步
6、完成安装,点击Done
2、安装HAL库
1、打开安装完成的STM32CubeMX软件,按如下图步骤点击
2、在弹出来的界面中勾选相应的HAL库,点击安装
三、流水灯
(一)C语言HAL库实现流水灯
假设手中已有 STM32最小系统核心板(STM32F103C8T6)+面板板+3只红绿蓝LED,并搭建了电路,分别GPIOA-5、GPIOB-9、GPIOC-14 这3个引脚上控制LED灯(最高时钟2Mhz),轮流闪烁,间隔时长1秒。
1)写出程序设计思路,包括GPIOx端口的各寄存器地址和详细参数;
2)用C语言 寄存器方式编程实现。
1、新建项目
(1)回到STMCubeMX的主界面,创建新项目。
(2)选择芯片,并点击start project
(3)点击system core,进入SYS,在debug下面进行选择
(4)配置时钟,进入RCC,有两个时钟,分别是HSE和LSE。要用的是GPIO接口,在APB2里面
时钟架构,APB2总线的时钟由HSE控制,按如图操作
(5)将HSE设置为Crystal/Ceramic Resonator
(6)点击相应引脚设置输出寄存器(output),即PA5,PB9,PC14
(7)配置项目名称和路径,并更改设置
(8)进入 code generate界面,选择生成初始化.c/.h文件,后面点击generate code,选择open project,然后就到KEIL5
2、keil仿真调试
(1)接上一步操作,然后按照如下图操作打开main.c文件,找到主函数
(2)将下面代码放入主函数中(替代相应内容)
SystemClock_Config();//???????MX_GPIO_Init();//gpio???while (1){ HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_RESET);//PA4??HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);//PB9??HAL_GPIO_WritePin(GPIOC,GPIO_PIN_14,GPIO_PIN_SET);//PC15??HAL_Delay(1000);//??1sHAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_SET);//PA4??HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET);//PB9??HAL_GPIO_WritePin(GPIOC,GPIO_PIN_14,GPIO_PIN_SET);//PC15??HAL_Delay(1000);//??1sHAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_SET);//PA4??HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);//PB9??HAL_GPIO_WritePin(GPIOC,GPIO_PIN_14,GPIO_PIN_RESET);//PC15??HAL_Delay(1000);//??1s}
(3)电路连接
根据设计的程序连接电路:
对于USB转TTL模块和stm32f103c8t6连接:
GND — GND
3v3 — 3v3
TXD — A10
RXD — A9
总电路:
红——B9
绿——C14
黄——A5
3、观察GPIO端口的输出波形
(1)点击魔法棒,点击target选择正确的晶振大小,此处使用的是8MHz的外部晶振。这个选项在软件仿真中起到很重要的作用,如果选择错误,那么波形一定是错误的,因为时间不准确。
(2)在点击debug界面进行设置
(3)然后编译再调试
(4)选择逻辑分析仪
(5)选择要观察的引脚
(6)设置
(7)运行程序
(8)观察波形
4、烧录程序
进入mcuisp,①选择相应的hex文件,②确保串口及bps,然后按照其调整,再开始编程
流水灯
引脚为低电平的灯亮,高电平的灯不亮,高低电平转换周期(LED闪烁周期)为1s左右。
(二)、用寄存器方式实现点亮流水灯
1、项目创建
详见基于MDK创建汇编语言STM32工程–LED闪烁
注意:芯片选择STM32F103C8
出现下图时,直接叉掉
添加main.c
文件
找到如下文件
复制到新建的项目下
将刚才添加的文件添加到如图中
点击魔法棒,进行选择
2、编写代码
在main.c中写入函数
#define GPIOB_BASE 0x40010C00
#define GPIOC_BASE 0x40011000
#define GPIOA_BASE 0x40010800#define RCC_APB2ENR (*(unsigned int *)0x40021018)#define GPIOB_CRH (*(unsigned int *)0x40010C04)
#define GPIOC_CRH (*(unsigned int *)0x40011004)
#define GPIOA_CRL (*(unsigned int *)0x40010800)#define GPIOB_ODR (*(unsigned int *)0x40010C0C)
#define GPIOC_ODR (*(unsigned int *)0x4001100C)
#define GPIOA_ODR (*(unsigned int *)0x4001080C)void SystemInit(void);
void Delay_ms(volatile unsigned int);
void A_LED_LIGHT(void);
void B_LED_LIGHT(void);
void C_LED_LIGHT(void);
void Delay_ms( volatile unsigned int t)
{unsigned int i;while(t--)for (i=0;i<800;i++);
}void A_LED_LIGHT(){GPIOA_ODR=0x0<<5; //PA5低电平GPIOB_ODR=0x1<<9; //PB9高电平GPIOC_ODR=0x1<<14; //PC14高电平
}
void B_LED_LIGHT(){GPIOA_ODR=0x1<<5; //PA5高电平GPIOB_ODR=0x0<<9; //PB9低电平GPIOC_ODR=0x1<<14; //PC14高电平
}
void C_LED_LIGHT(){GPIOA_ODR=0x1<<5; //PA5高电平GPIOB_ODR=0x1<<9; //PB9高电平GPIOC_ODR=0x0<<14; //PC14低电平
}int main(){int j=100;// 开启时钟RCC_APB2ENR |= (1<<3); // 开启 GPIOB 时钟RCC_APB2ENR |= (1<<4); // 开启 GPIOC 时钟RCC_APB2ENR |= (1<<2); // 开启 GPIOA 时钟// 设置 GPIO 为推挽输出GPIOB_CRH&= 0xffffff0f; //设置位 清零GPIOB_CRH|=0x00000020; //PB9推挽输出GPIOC_CRH &= 0x0fffffff; //设置位 清零GPIOC_CRH|=0x30000000; //PC15推挽输出GPIOA_CRL &= 0xfff0ffff; //设置位 清零GPIOA_CRL|=0x00010000; //PA4推挽输出// 3个LED初始化为不亮(即高点位)GPIOB_ODR |= (1<<9); GPIOC_ODR |= (1<<14); GPIOA_ODR |= (1<<5); while(j){B_LED_LIGHT();Delay_ms(1000000);C_LED_LIGHT();Delay_ms(1000000);A_LED_LIGHT();Delay_ms(1000000);}}void SystemInit(){}
3、编译程序
先创建,再编译
四、串口通信
(一)HAL库实现
1、仪器选择和接口设置
电路连接
根据设计的程序连接电路:
对于USB转TTL模块和stm32f103c8t6连接:
GND — GND
3v3 — 3v3
TXD — A10
RXD — A9
总电路:
红——B9
绿——C14
黄——A5
2、创建项目
1)、打开STM32CubeMX创建
2)、选择芯片,再进行如下操作
3)、配置时钟
4)、设置USART1
5)、选择HSE和PLLCLK
6)、命名、选择路径等
7)、打开项目
3、编写代码
在main.c文件中添加如下代码:
char data[]="hello windows!\n";HAL_UART_Transmit(&huart1, (uint8_t *)data, 15, 0xffff);HAL_Delay(1000);
点击魔法棒,再点击Output,生成.hex文件,并点击确定
4、烧录程序
5、串口调试
先打开生成的.hex文件,再打开串口,然后就会出现hello windows!
6、观察波形
先点击魔法棒,再点击debug,然后进行设置
先编译,再调试,然后设置参数
设置完成后,点击run即可出现波形
(二)寄存器实现
1、keil创建项目
先续步骤详见STM32CubeMX安装并采用HAL库编程点亮流水灯
注意芯片的选择
遇到如下图直接叉掉
创建hello.s文件
2、编写hello.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_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)
GPIOC_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模块总使能 发送与接收使能 ;71 02 00 00 2c 20 00 00 ;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] ;主循环
main ldr r0, =Flag1 ldr r1, [r0] tst r1, #Bit1 ;SysTick产生0.5s,置位bit 1 beq main ;0.5s标志还没有置位 ;0.5s标志已经置位 ldr r0, =b_05s ;位带操作清零0.5s标志 mov r1, #0 str r1, [r0] bl LedFlas mov r0, #'H' bl send_a_charmov r0, #'e' bl send_a_charmov r0, #'l' bl send_a_charmov r0, #'l' bl send_a_charmov r0, #'o' bl send_a_charmov r0, #' ' bl send_a_charmov r0, #'w' bl send_a_charmov r0, #'i' bl send_a_charmov r0, #'n' bl send_a_charmov r0, #'d' bl send_a_charmov r0, #'o' bl send_a_charmov r0, #'w' bl send_a_charmov r0, #'s' bl send_a_charmov r0, #'!' bl send_a_charmov r0, #'\n' bl send_a_charb main;子程序 串口1发送一个字符
send_a_char push {r0 - r3} ldr r2, =USART1_DR str r0, [r2]
b1 ldr r2, =USART1_SR ldr r2, [r2] tst r2, #0x40 beq b1 ;发送完成(Transmission complete)等待 pop {r0 - r3} bx lr ;子程序 led闪烁
LedFlas push {r0 - r3} ldr r0, =Flag1 ldr r1, [r0] tst r1, #Bit0 ;bit0 闪烁标志位 beq ONLED ;为0 打开led灯 ;为1 关闭led灯 ldr r0, =b_flas mov r1, #0 str r1, [r0] ;闪烁标志位置为0,下一状态为打开灯 ;PC.7输出0 ldr r0, =GPIOC_BRR ldr r1, [r0] orr r1, #Bit7 str r1, [r0] b LedEx
ONLED ;为0 打开led灯 ldr r0, =b_flas mov r1, #1 str r1, [r0] ;闪烁标志位置为1,下一状态为关闭灯 ;PC.7输出1 ldr r0, =GPIOC_BSRR ldr r1, [r0] orr r1, #Bit7 str r1, [r0]
LedEx pop {r0 - r3} bx lr ;异常程序
NMI_Handler bx lr HardFault_Handler bx lr SysTick_Handler ldr r0, =SysTim ldr r1, [r0] add r1, #1 str r1, [r0] cmp r1, #500 bcc TickExit mov r1, #0 str r1, [r0] ldr r0, =b_05s ;大于等于500次 清零时钟滴答计数器 设置0.5s标志位 ;位带操作置1 mov r1, #1 str r1, [r0]
TickExit bx lr ALIGN ;通过用零或空指令NOP填充,来使当前位置与一个指定的边界对齐 END
编译,没有错误
3、烧录程序
点击魔法棒,再点击Output,生成.hex文件,并点击确定
烧录步骤HAL库
4、观察波形
点击魔法棒,进入下面的界面进行操作
调试,然后选择逻辑
五、总结
在STM32Cube中设置注意串口的设置,连接电路时保证电路的正确性与完备性。连接的时候出现了很多问题,串口连接没连接上可以尝试更换USB接口或者重新多次连接。
六、参考资料
百度百科
http://t.csdn.cn/cId9h
基于STM32实现串口通信输出hello windows!相关推荐
- 串口通信输出Hello Windows
STM32串口通信标准 一.串口通信输出Hello Windows 1.1创建项目 在keil中创建新项目 特别说明:不用勾选CORE和Startup 1.2实验代码 添加如下asm文件代码 ;RCC ...
- 单片机与PC机的交流———基于STM32的串口通信
STM32之串口通信程序 前言: 一.串口通信要求 二.串口通信准备 1.硬件准备 2.软件准备 三.下载程序进入STM32 1.下载之前相关配置 2.下载 四.最终效果展示 总结: 前言: 本文主要 ...
- 嵌入式STM32入门之STM32基础串口通信
STM32基础串口通信 一.前言 二.串口协议 (1)浅谈设备通信方式 (2)具体串口协议 (3)STM32的串口通信 (4)RS-232通信协议 (5)USB To TTL(CH340) 5.1 C ...
- STM32 —— STM32 的串口通信
STM32 -- STM32 的串口通信 STM32的串口通信接口有两种,分别是:UART(通用异步收发器).USART(通用同步异步收发器).而对于大容量 STM32F10x 系列芯片,分别有 3 ...
- Ardunio下实现STM32的串口通信及其与Stduino的区别
摘要 本文介绍了在Ardunio下配置STM32并进行STM32的串口通信:之后我将介绍一下国人MCU开发平台Stduino与现在所使用的Arduino进行比较. 文章目录 摘要 :man_stude ...
- K210学习笔记(三) K210与STM32进行串口通信,K210发STM收
文章目录 前言 一.以/r/n为结尾 二.K210端代码 三.STM32端 3.1 main函数 四.测试结果 4.1当收到1时 4.2当收到2时 4.3 测试视频 总结 前言 前面我们讲了STM32 ...
- 基于STM32的DAC音频输出
基于STM32的DAC音频输出 一.DAC 1.1 DAC简介 1.2 DAC功能框图剖析 二.使用DAC输出周期2kHz的正弦波 2.1 使用Adobe Audition输出一个周期2khz的正弦波 ...
- 【星曈科技】OpenMv笔记——利用OpenMV与STM32进行串口通信
利用OpenMV与STM32进行串口通信 OpenMV端的程序 # Untitled - By: dell - 周一 7月 19 2021# Blob Detection and uart trans ...
- 基于FPGA Uart串口通信实验
基于FPGA Uart串口通信实验 首先需要了解uart串口通信协议,根据个人专业需求不同,了解的层面可以不同. UART简介 通用异步收发传输器(Universal Asynchronous Rec ...
最新文章
- [Swift]LeetCode324. 摆动排序 II | Wiggle Sort II
- python乘法表左下变右上_vc++乘法表变换形式怎么变就是变成左上、右上三角形 左下、右下、等腰三角形 还有倒三角形,...
- 百练OJ:3681与2796:数字求和
- 在Linux CentOS上编译CoreCLR
- React Native微信支付开发爬坑之旅
- CNN中的卷积操作与权值共享
- mysql cmake 编译出错_Mysql安装过程中CMAKE编译出错
- Red Hat Enterprise Linux上配置SQL Server Always On Availability Group
- wordpress建立数据库连接时出错
- 好看的php表格样式,HTML5制作表格样式
- 考研高等数学张宇30讲笔记——第十二讲 二重积分
- English Pod 听力学习之路 C69 - C75
- 离散题目16——自反闭包
- 微信小程序——云开发|计费方式调整大家怎么看?
- 一路前行 2008-12-17
- 【LEDE】x86软路由之路-12-浅谈复杂网络环境中的AP优化
- Day739.GEO经纬度数据结构自定义数据结构 -Redis 核心技术与实战
- linux 查看系统命令
- Oracle索引梳理系列(二)- Oracle索引种类及B树索引
- WPF实现简单的9宫格键盘移动方块