本人从新学者的角度积累了一些STM8S207这个8位微控制器的心得体会
STM8S学习笔记 SWIM 引脚除了作为调试接口,还可以作为普通的 I/O 口使用,用户使用过程中,如果既想 将这个管脚作为调试脚,又想作为普通 I/O 脚,安全的做法是做 PCB 时加一个跳线,通过跳线的连接来切换功能。建议在 SWIM 管脚加一个 4.7K 的上拉电阻,以保证调试时数据的可靠性 STM8S 除了通过 SWIM 接口来下载程序,有些型号还支持通过UART 接口来下载 我们选择了 PB3、PD3、PD7 作为三个用户按键的接口。电路中的三个电阻和电容为硬件防抖,这样 程序设计中就不用进行软件防抖处理 USB转TTL电路的 USB 接口 浮动输入:是 GPIO 的管脚的电平状态是不确定的,容易受到外部电平的干扰 上拉输入:管脚的电平则只有高电平或低电平两种确定的状态。一般 I/O 做外部中断输入时要设置为上拉输入,做 A/D 转换时要设置为浮动输入 推挽输出:推挽输出方式能够独立的输出高电平和低电平,适合驱动数字器件; 开漏输出:开漏输出可以稳定的输出低电平,能承受大的灌电流,但是开漏输出无法输出高电平,需要外接上拉电阻才可以输出高电平,输出的高电平则有外接的上拉电平决定,这种输出方式适合做电流型驱动。 做按键输入时为了能够准确的得到键值,我们应当将相应 GPIO 口设置为带上拉输入或者在 GPIO 外部增加一个外部上拉电阻 GPIO口操作 1)使用寄存器来操作 端口 X 输出数据寄存器 Px_ODR—存放端口要输出的数据 端口 X 输入寄存器 Px_IDR—存放引脚的状态值,此寄存器只读 端口 X 数据方向寄存器 Px_DDR—设置端口的输入/输出, 某位被设置为1时,对应管脚为输出模式;当某位被设置为0 时,对应的管脚为输入模式 端口 X 控制寄存器 1 Px_CR1—设置端口输入模式、输出模式 在端口为输入模式下,设置端口的上拉模式:0—浮空输入;1—带内部弱上拉输入; 在端口为输出模式下,设置端口为开漏输出或推挽输出: 0—模拟开漏输出;1—推挽输出; 端口 X 控制寄存器 2 Px_CR2—设置端口中断开关及输出摆率 在端口为输入模式下,设置端口的中断: 0—禁止外部中断;1—使能外部中断; 在端口为输出模式下,设置端口的输出摆率: 0— 低速摆率,输出速度最大2M;1—快速摆率,输出速度最大10M PC_DDR|=0x08;这句代码用来将PC_DDR寄存器的[3]位置位,而不影响寄存器的其他位,这句代码实质上是将 PC_DDR寄存器的值与0x08进行或操作,然后再赋值给 PC_DDR寄存器 PC_ODR&=0xF7;//PC_ODR 第4位清零,输出低电平,在程序中出现的&=也是嵌入式 C 语言中比较常用的位操作方式,它用来将某位清零,而不影响寄存器的其他位。这句代码实质上是将 PC_DDR寄存器的值与0x08进行与操作,然后再赋值给 PC_DDR 寄存器。 PC_ODR^=0x08;这一句代码即可实现前述的2 句代码的功能,它是对寄存器某位的值进行取反操作 PC_ODR_ODR3^=1,对PC3取反 与 GPIO 输出有关的函数有(GPIO 的库函数文件 stm8s_gpio.c) GPIO_Init:GPIO 端口初始化; GPIO_Write:设置整个端口输出值; GPIO_WriteHigh:设置某个管脚输出高电平; GPIO_WriteLow:设置某个管脚输出低电平; GPIO_WriteReverse:翻转某个管脚这些功能; 时钟系统外部时钟信号直接接STM8 单片机的OSCIN 管脚,OSCOUT 则可以节省下来做GPIO使用 当 STM8S 单片机复位之后,默认将 HSI 的 8 分频作为系统主时钟,2MHz 的 HSI 时钟信号可以保证系统在即使 VDD 较差的情况下也能正常启动,HSI为16Mhz的一个RC震荡时钟。 LSI可以作为在停机模式下维持独立看门狗和自动唤醒单元的低功耗时钟源。 使用库函数来切换时钟 CLK_ClockSwitchCmd:启动或关闭时钟切换 CLK_ClockSwitchConfig:系统时钟切换配置 CLK_GetSYSCLKSource:获取系统时钟源 CLK_GetFlagStatus:获取时钟状态 CLK_SYSCLKConfig:系统时钟分频 中断控制器ITC 中断根据中断事件请求的来源可分为软件中断和硬件中断,硬件中断又分为内部中断和外部中断。 所有 I/O 口都具有外部中断能力,每个端口都具有独立的中断向量和独立的中断标志 2 个不可屏蔽(只要有中断请求,处理器必须要处理)的中断:RESET、TRAP; 1 个不可屏蔽的最高优先级的硬件中断 TLI(PD7);
STM8S 的外部中断向量一共有 5 个: PA 口:PA[6:2] 共 5 个管脚 PB 口:PB[7:0] 共 8 个管脚 PC 口:PC[7:0] 共 8 个管脚 PD 口:PD[6:0] 共 7 个管脚 PE 口:PE[7:0] 共 8 个管脚 中断向量表中的中断又称为硬件中断,中断向量号越小,中断的优先级越高, 软件中断优先级级别越高,优先级越高 InitEXTI();函数为对按键对应的 I/O 口进行初始化 EXTI_DeInit:初始化相关寄存器至默认值 EXTI_SetExtIntSensitivity:设置指定端口的外部中断触发方式 enableInterrupts:开启中断 disableInterrupts:关闭中断
中断服务函数位于文件 stm8s_it.c中,此文件定义了所有中断的服务程序。 定时器 高级控制型:TIM1,16 位; 通用型:TIM2/TIM3/TIM5,16 位; 基本型:TIM4/TIM6,8 位; Timer4_Init(0xff);为我们在库函数基础上开发的 API 函数,0xff 为输入参数,函数作用是初始化 TIM4。 TIM4_DeInit();函数的功能为将 TIM4 相关寄存器全部恢复至默认值。 TIM4_TimeBaseInit 为初始化 TIM4 时基单元函数,第一个参数为设置 TIM4 的时钟分频值,;第二个参数为设置 TIM4_ARR 寄存器的值。 TIM4_ITConfig 为 TIM4 中 断 配 置 函 数 , 它 设 置 TIM4 向 上 溢 出 中 断 , 并 使 能 中 断 。 TIM4_Cmd(ENABLE);为使能 TIM4 并开始计数。 TIM4 溢出中断的响应函数在程序文件 stm8s_it.c 中 函数 TIM1_DeInit()将 TIM1 的相关寄存器恢复至默认值。 函数 TIM1_TimeBaseInit()用于初始化 TIM1 时基参数,可以设置 TIM1 的预分频值、计数方式、自动 重装载值及重复计数器值。 TIM1_OC3Init()用于初始化输出比较通道 3 的参数,可以设置 TIM1 通道 3 匹配时输出电平和 PWM 模式、是否启用比较输出及互补比较输出、脉冲宽度、输出比较及互补输出比较的极性、输出比较空闲 状态及互补输出比较空闲状态的电平值。参数脉冲宽度在 PWM 模式中使用,在其他模式中不能设置位高 于 TIM1_ARR 寄存器的值。 TIM1_Cmd(ENABLE)语句则使能 TIM1 计数器开始计数。 TIM1_OC3PreloadConfig(ENABLE)使能输出比较 3 预装载功能。 TIM1_CtrlPWMOutputs(ENABLE)使能 TIM1 的主输出功能 模数转换器 分辨率为10位 转换可被外部触发:ADC专用外部中断ADC_ETR、定时器触发信号 TRGO IIC总线接口 所有的通信器件通过串行数据线 SDA 和串行时钟线 SCL,但某一时刻总线上只能有一个主机 实际应用中 IIC 总线的 2 根通信线须接有 5~10K 的上拉电阻(10K)
EEPROM(Electrically Erasable Programmable Read-Only Memory),电擦除可编程只读存储器, 和电写入、掉电后数据不丢失的存储器,它在应用中一般存储用户数据,在系统运行过程中可以随时修改,系统复位之后从里面读取的是修改之后的新数据
完整的Word格式文档51黑下载地址:
STM8S学习笔记.docx
(604.05 KB, 下载次数: 19)
|