文章目录

  • 前言
  • 一、介绍
    • 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!相关推荐

  1. 串口通信输出Hello Windows

    STM32串口通信标准 一.串口通信输出Hello Windows 1.1创建项目 在keil中创建新项目 特别说明:不用勾选CORE和Startup 1.2实验代码 添加如下asm文件代码 ;RCC ...

  2. 单片机与PC机的交流———基于STM32的串口通信

    STM32之串口通信程序 前言: 一.串口通信要求 二.串口通信准备 1.硬件准备 2.软件准备 三.下载程序进入STM32 1.下载之前相关配置 2.下载 四.最终效果展示 总结: 前言: 本文主要 ...

  3. 嵌入式STM32入门之STM32基础串口通信

    STM32基础串口通信 一.前言 二.串口协议 (1)浅谈设备通信方式 (2)具体串口协议 (3)STM32的串口通信 (4)RS-232通信协议 (5)USB To TTL(CH340) 5.1 C ...

  4. STM32 —— STM32 的串口通信

    STM32 -- STM32 的串口通信 STM32的串口通信接口有两种,分别是:UART(通用异步收发器).USART(通用同步异步收发器).而对于大容量 STM32F10x 系列芯片,分别有 3 ...

  5. Ardunio下实现STM32的串口通信及其与Stduino的区别

    摘要 本文介绍了在Ardunio下配置STM32并进行STM32的串口通信:之后我将介绍一下国人MCU开发平台Stduino与现在所使用的Arduino进行比较. 文章目录 摘要 :man_stude ...

  6. K210学习笔记(三) K210与STM32进行串口通信,K210发STM收

    文章目录 前言 一.以/r/n为结尾 二.K210端代码 三.STM32端 3.1 main函数 四.测试结果 4.1当收到1时 4.2当收到2时 4.3 测试视频 总结 前言 前面我们讲了STM32 ...

  7. 基于STM32的DAC音频输出

    基于STM32的DAC音频输出 一.DAC 1.1 DAC简介 1.2 DAC功能框图剖析 二.使用DAC输出周期2kHz的正弦波 2.1 使用Adobe Audition输出一个周期2khz的正弦波 ...

  8. 【星曈科技】OpenMv笔记——利用OpenMV与STM32进行串口通信

    利用OpenMV与STM32进行串口通信 OpenMV端的程序 # Untitled - By: dell - 周一 7月 19 2021# Blob Detection and uart trans ...

  9. 基于FPGA Uart串口通信实验

    基于FPGA Uart串口通信实验 首先需要了解uart串口通信协议,根据个人专业需求不同,了解的层面可以不同. UART简介 通用异步收发传输器(Universal Asynchronous Rec ...

最新文章

  1. [Swift]LeetCode324. 摆动排序 II | Wiggle Sort II
  2. python乘法表左下变右上_vc++乘法表变换形式怎么变就是变成左上、右上三角形 左下、右下、等腰三角形 还有倒三角形,...
  3. 百练OJ:3681与2796:数字求和
  4. 在Linux CentOS上编译CoreCLR
  5. React Native微信支付开发爬坑之旅
  6. CNN中的卷积操作与权值共享
  7. mysql cmake 编译出错_Mysql安装过程中CMAKE编译出错
  8. Red Hat Enterprise Linux上配置SQL Server Always On Availability Group
  9. wordpress建立数据库连接时出错
  10. 好看的php表格样式,HTML5制作表格样式
  11. 考研高等数学张宇30讲笔记——第十二讲 二重积分
  12. English Pod 听力学习之路 C69 - C75
  13. 离散题目16——自反闭包
  14. 微信小程序——云开发|计费方式调整大家怎么看?
  15. 一路前行 2008-12-17
  16. 【LEDE】x86软路由之路-12-浅谈复杂网络环境中的AP优化
  17. Day739.GEO经纬度数据结构自定义数据结构 -Redis 核心技术与实战
  18. linux 查看系统命令
  19. Oracle索引梳理系列(二)- Oracle索引种类及B树索引
  20. WPF实现简单的9宫格键盘移动方块

热门文章

  1. 振兴会杜振国:上证指数编制要调整了,3000点永别了?
  2. idea显示项目端口号被占用,怎么搞?
  3. iOS---使用CAEmitterLayer制作发射粒子的特效
  4. 严蔚敏《数据结构(C语言版)》第二章 纯C实现
  5. LinkCode-最多有多少个点在一条直线上
  6. 全球及中国洗手皂和洗手液行业市场营运格局分析与发展策略建议报告2022-2028年
  7. 计算机网络应用是什么专业类别,网络工程专业属于什么类别
  8. tf.quantization
  9. 电子拍卖系统毕业设计
  10. 抖音 -抖店开放平台 SDK 实现及项目工程