STM8 入门学习与实验(一)GPIO与UART
来源:互联网 发布:淘宝规蜜投诉 编辑:程序博客网 时间:2024/06/06 12:27
简介:这一章节将描述如何配置GPIO,以及如何配置UART
STM8工程模版:http://download.csdn.net/detail/u012388993/9904051
这两则实验将使用到的基本的系统配置初始化函数
CLK_PeripheralClockConfig(CLK_PERIPHERAL_UART1, ENABLE);//配置UART1时钟
CLK_SYSCLKConfig(CLK_PRESCALER_HSIDIV1);配置时钟分频为1,则系统时钟频率为16Mhz/1 = 16Mhz
CLK_HSICmd(ENABLE);//使能内部振荡器
实验一、点亮LED灯,灯正极接电源负极连接到引脚以减少驱动电流需求
代码组成
函数1.初始化GPIO并设定为输出、高频率、推挽
函数2.开GPIO输出,这里会熄灭LED灯
void ledInitAndOn(void)//demo{ GPIO_Init(LED1PORT, LED1PIN, GPIO_MODE_OUT_OD_HIZ_FAST);GPIO_WriteLow(LED1PORT, LED1PIN);}void ledOff(void)//demo{GPIO_WriteHigh(LED1PORT, LED1PIN);}
关于GPIO的配置:
设置为OUTPUT
具有四个可选项,例如我需要配置低速开关、上拉、默认高电平输出模式部分的选择为如下所示
GPIO_MODE_OUT_PP_HIGH_SLOW
如果是高速开关、推挽、默认低电平输出则
GPIO_MODE_OUT_PP_LOW_FAST
开漏高阻态输出
GPIO_MODE_OUT_OD_HIZ_SLOW
STM8的GPIO模式配置语句就是一种混合的组合,实际使用非常方便简约
如果要解除初始化使用
GPIO_DeInit
例如GPIO_DeInit(GPIOA);
实验二、配置UART1,输出语句到上位机
我所使用的S103F3P的引脚RX和TX分别为PD5和PD6,这里使用一个CH340 USB转串口的工具来收发数据
初始化函数
void UART_Init(void){ GPIO_Init(GPIOD, GPIO_PIN_7, GPIO_MODE_OUT_OD_LOW_FAST);GPIO_Init(GPIOD, GPIO_PIN_6, GPIO_MODE_IN_PU_NO_IT); UART1_Init((u32)115200, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO, UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_TXRX_ENABLE); UART1_Cmd(ENABLE);}以上函数的说明:
已知PIN6是RX,PIN7是TX,因此配置GPIO中引脚RX为输入、上拉,不配置中断,TX为高速开关、开漏输出
初始化配置串口为115200,8字,停止位1,无校验,禁用同步模式时钟,启用TXRX模式,最后一个可以只启用TX也可以只启用RX,如果只启用RX的时候发送数据将进入错误处理无法仅需执行。
最后配置完成后,使能UART1。
应用类函数:
函数1.重新命名包装发送一个字节的函数,用以方便移植
函数2.发送一段字符串
void UART_oneByte(u8 data){ UART1_SendData8(data);}void UART_sendStr(u8 *str){int i; for(i=0;i<strlen(str);i++) { while(UART1_GetFlagStatus(UART1_FLAG_TXE) == RESET); UART_oneByte(str[i]);delay(1); } return;}
实验结果:
两个实验综合起来的参考代码:
main.c
/* MAIN.C file * * Copyright (c) 2002-2005 STMicroelectronics */#include "stm8s.h"#include "string.h"#define LED1PIN GPIO_PIN_7#define LED1PORT GPIOC#ifdef USE_FULL_ASSERTvoid assert_failed(u8* file, u32 line){ while (1) { }}#endifvoid delay(int ms){int i,j,k;for(k=0;k<ms;k++) for(i=0;i<100;i++) for(j=0;j<20;j++){}}void UART_Init(void){ GPIO_Init(GPIOD, GPIO_PIN_7, GPIO_MODE_OUT_OD_LOW_FAST);GPIO_Init(GPIOD, GPIO_PIN_6, GPIO_MODE_IN_PU_NO_IT); UART1_Init((u32)115200, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO, UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_TXRX_ENABLE); UART1_Cmd(ENABLE);}void UART_oneByte(u8 data){ UART1_SendData8(data);}void UART_sendStr(u8 *str){int i; for(i=0;i<strlen(str);i++) { while(UART1_GetFlagStatus(UART1_FLAG_TXE) == RESET); UART_oneByte(str[i]);delay(1); } return;}void sysConfigure(void){CLK_PeripheralClockConfig(CLK_PERIPHERAL_UART1, ENABLE); CLK_SYSCLKConfig(CLK_PRESCALER_HSIDIV1); CLK_HSICmd(ENABLE);}void ledInitAndOn(void)//demo{ GPIO_Init(LED1PORT, LED1PIN, GPIO_MODE_OUT_OD_HIZ_FAST);GPIO_WriteLow(LED1PORT, LED1PIN);}void ledOff(void)//demo{GPIO_WriteHigh(LED1PORT, LED1PIN);}main(){sysConfigure();UART_Init();while (1){ledInitAndOn();delay(500);ledOff();delay(500);UART_sendStr("yo,hello,stm32");}}
- STM8 入门学习与实验(一)GPIO与UART
- STM8 入门学习与实验(二)TIM 定时器
- STM8 GPIO 学习(驱动LED、Button)
- STM8学习笔记(一)
- Cortex-M3学习日志(一)-- GPIO实验1
- STM8 UART
- STM8->GPIO
- STM8库函数学习笔记之GPIO
- 【ARM学习笔记】实验一:S3C2440A的GPIO输出实验
- 深度纸质学习与实验(一)-准备
- 实验一与实验二
- 关于UART的学习与应用
- STM8学习笔记之杂记(1.推挽输出与开漏输出的区别)
- vueJS学习(一)入门学习与路由
- STM8学习笔记三----按键实验
- ARM学习之UART实验
- STM8学习笔记(一) 建立第一个工程
- STM8的IAP与APP
- Lua 特殊字符串转成特殊表处理
- [bzoj1500][NOI2005]维修数列 splay大模板
- Python String方法
- 2018国家公务员考试备考反面论证法在片段阅读中的用法小结(1)
- 什么是socket
- STM8 入门学习与实验(一)GPIO与UART
- gdb 如何调试内存地址
- Data Structure-2 Queue 循环队列,用数组实现
- strncpy字符串拷贝函数
- Android 仿QQ未读消息拖拽删除粘性控件效果
- lintcode --螺旋矩阵II
- wireshark 学习更进一步 之RST数据解读
- Hdu-5371 Hotaru's problem(马拉车算法)
- Java NIO系列教程(六) Selector