本帖最后由 toofree 于 2019-2-19 01:16 编辑 4 R* z% l$ y5 u9 U3 O7 n 【STM8-SO8-DISCO】——3、IO测试,按键+点灯 9 F% p2 U# u+ c/ k3 |$ G 本贴所用工程模板参考,【STM8-SO8-DISCO】——2、简单粗暴建工程模板https://www.stmcu.org.cn/module/f ... 9341&fromuid=307297! v E: [4 Z, H* [ W% c (出处: 意法半导体STM32/STM8技术社区) 5 N4 }) r: Z0 E- a/ b, x; K 从户手册中原理图来看,按键B1和LED灯LD1都是高电平有效。 ' \" _! e, G: |* {! [) K/ ^0 O* c( U 用户手册中显示,STM8S001对应LD1的IO为PA3/PB5。 - z/ I; k/ ]1 j STM8S001对应按键B1的IO为PC3/PC4/PC5 从STM8S系列参考手册RM0016找到,IO对应5个寄存器 - `+ g+ h. V* k! Y" X6 c( {4 i 输出数据寄存器、寄入数据寄存器 8 k, J) J8 w2 o/ R. T) z) ^7 Z+ C 方向寄存器、控制寄存器1) n0 N/ |. C: W! m " N1 S J0 u; n! N7 u7 |9 O6 ]3 T 控制寄存器2( b: f$ g9 x% V* Q0 A 4 m; C5 M/ n/ g D0 e IO模式设置列表2 `& d4 S+ E3 t3 h 在函数库中IO械宏定义为12种情况,分别对应4种输入模式,8种输出模式。 t; Y. C1 D7 t% F( U% x 4种输出模式为浮空/上拉、中断/IO的组合情况;8种输出模式是推挽/OD、快速/慢速、默认高/低电平的组合情况。 9 {( z; X0 `0 I8 T' c3 A/ c 在“main.c”中开头,添加LED、KEY宏定义。主函数“main()”中,设置IO模式。主循环中通过判断KEY的状态,来控制输出对应LED状态。 . D' C' a3 X# [' p 用到的几个函数也都比较简单。GPIO_Init(),设置IO工作模式,实际操作寄存器ODR、DDR、CR1、CR2。 1 @0 _+ C' A4 t- k0 ~ GPIO_ReadInputPin()实际操作寄存器IDR6 k" Y* x. o* o, L* \3 E 6 r0 B* f1 s0 h$ X& j4 T3 p GPIO_WriteHigh()、GPIO_WriteLow()操作寄存器ODR. `' s" K" N; D ) {5 a/ D+ \: L" g# | 编译、下载程序,加断点,Debug调试。 : d3 @9 M1 Q4 p, S- K# M* M 打开寄存器观察窗口,显示PA和PC相关寄存器,IAR观察寄存器时需要程序停止,不停的话不会随时更新。 当B1不按时,PC_IDR3/4/5为0,PA_ODR3为0。 " q4 A/ m1 ~) s7 ] 当B1按下时,PC_IDR3/4/5为1,PA_ODR3为1。 ; S8 j$ m. M1 k( C. {0 U# j 实验现象,按下B1,LD1点亮;抬起B1,LD1熄灭。7 y$ V. @1 H7 T 对STM8S001的IO基本输入、输出功能测试完成,达到预期目标。 ! b+ U4 N) f+ ?4 I m 附上程序工程:(20190219工程有更新,之前上传的版本有误,不是工程模板生成的) |
支持一下~ |
支持一下 |
学习了,一直不会玩STM8 |
我也直接用的工程模板 |
谢谢分享!!!! |
学习了,多谢分享 |
许欸额 |