STM8S103F3P6核心板学习笔记

本文最后更新于:2022年5月29日 上午

开发板与仿真器连接

2018-04-09
仿真器 STM8开发板
3.3 3.3V
SWIM SWIM
GND GND
RST NRST

新建一个项目

  1. 启动IAR,选择Project->Create New Projects…
  2. 选择C
  3. 然后选择路径并指定文件名,然后按Save保存
  4. 然后选Project->Options…设置项目属性
  5. General options -> Target -> Device -> STM8S -> STM8S103F3P
  6. Debugger -> Setup -> Driver -> ST-LINK
  7. Debugger -> ST-LINK -> 选中Verify

编译运行项目

  1. 选择Project -> Make,编译项目

    (如果需要重新编译这个项目,可以选择Project -> Rebuild All)

  1. 选择Project -> Download and Debug, 把编译好的文件下载到电路板

  2. 选择Debug->Go运行程序

用IAR调试程序:

Toggle Breakpoint: 设置断点,程序运行到断点时会自动暂停

执行Download and Debug之后:

​ Go: 运行整个程序

    Reset: 重置程序,回到第一行

    Step over: 执行一条语句

View:

    Disassembly: 显示C语言对应的汇编

    Locals: 显示变量的值

    Registers: 显示寄存器的值

    Memory: 显示内存的内容

外部中断

2018-04-10

外部中断处理函数:(不是所有I/O都支持EXTI,reference manual P66)

外部中断设置:(头文件 #include <intrinsics.h>)

  1. Px_CR2寄存器:enable Portx external interrupt

  2. EXTI_CR1寄存器:设置触发条件(Page 70 of Reference manual)

  3. 打开全局中断:__enable_interrupt()

    -每组I/O口的中断号(IRQ number)都不同,Datasheet P43

    -函数名可以任意。例如PORTA_EXTI_Handler()

IAR语法

1
2
3
4
5
6
 #pragma vector = 中断号+2
 __interrupt void PORTA_EXTI_Handler(void)

{

}

USB转串口与STM8连接

2018-04-14

把USB转串口上的跳线帽拨到3.3V处。                     

STM8开发板 USB转串口
PD6(UART1_Rx) Tx
PD5(UART1_Tx) Rx
GND GND

寄存器

主要寄存器共12个,常用的有5个:
寄存器 | 功能
-|-
UART_SR | 保存串口控制器的状态
UART_DR | 保存接收或者发送的数据
UART_CR2 | 设置串口模式
UART_BRR1 | 设置波特率(baudrate)
UART_BRR2 | 设置波特率(baudrate)
其他 | 保持默认设置,即使用串口8-n-1模式

波特率具体取值可以计算,也可以参考Reference Manual的22.3.4节的Table 54

中断函数

用特殊的语法定义,例如:

1
2
3
4
5
#pragma vector = UART1_T_TXE_vector
__interrupt void UART1_T_TXE_Handler(void) {}

#pragma vector = UART1_R_RXNE_vector
__interrupt void UART1_R_RXNE_Handler(void) {}

其中#pragma vector和__interrupt是固定的语法

    UART1_T_TXE_vector指定这个中断处理函数是用来处理串口发送完毕中断

    UART1_R_RXNE_vector指定这个中断处理函数是用来处理串口接收中断

    UART1_T_TXE_vector和UART1_R_RXNE_vector在头文件iostm8s103f3.h中定义

    UART1_T_TXE_Handler()和UART1_R_RXNE_Handler()函数名可以是任意

    中断处理函数的内容要尽可能的短小,以免影响主程序的运行

定时器

2018-04-16

定时器的时钟频率

    Timer1的时钟频率 = fCK_PSC / (PSCR[15:0]+1)

    Timer2/3的时钟频率 = fCK_PSC / 2^PSCR[3:0]

Update Interrupt

设置中断发生的周期:ARR(Auto-reload register)

中断发生频率 = 定时器频率 / (AAR+1)
产生中断的时间 = 1 / 中断发生频率

以Timer2为例,假设主频为16MHz:

    TIM2_PSCR = 0x07;   // psc=7 => prescaler=2^7 =128 => 定时器频率=16MHz/128=125KHz

 

退出中断前需要对相应的状态位清零。


STM8S103F3P6核心板学习笔记
https://kevinloongc.github.io/posts/17311.html
作者
Kevin Loongc
发布于
2019年4月20日
许可协议