77范文网 - 专业文章范例文档资料分享平台

stm8学习笔记(2)

来源:网络收集 时间:2020-06-05 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

例如: Main() { u16 i;

GPIO_Init(PORTA, (PIN4 |PIN5 |PIN6), GPIO_MODE_OUT_PP_LOW_FAST); While(1)

{ GPIOA->ODR ^= (1<<4); //灯闪烁 For(i=0;i<3000;i++) ; //延时 } }

串口通信UART

Stm8微控制器家族的通用同步异步收发器(UART1,UART2或UART3)提供了一种灵活的方法与使用工业标准NRZ异步创行数据格式的外部设备之间进行全双共数据交换。Stm8的UART提供宽范围的波特率选择,并且支持多处理器通讯。

后面关于宏定义有关的都不再介绍,详情请看st固件库,从这里开始只介绍如何使用st提供的固件库搭建自己的程序。

因为我用的芯片stm8s105s4只有UART2,所有这里直接调用固件库中的uart2.c和uart2.h就可以了。Uart初始化函数如下:

UART2_DeInit(); // uart2中的个寄存器清零

/* UART1 configuration ------------------------------------------------------*/ /* UART1 configured as follow: - BaudRate = 9600 baud - Word Length = 8 Bits - One Stop Bit - Odd parity

- Receive and transmit enabled //允许发送、接收 - UART1 Clock disabled */

/* Configure the UART1 */

UART2_Init((u32)9600, UART2_WORDLENGTH_8D, UART2_STOPBITS_1, UART2_PARITY_NO, UART2_SYNCMODE_CLOCK_DISABLE, UART2_MODE_TXRX_ENABLE);

//* Enable the UART1 Receive interrupt: this interrupt is generated when the //UART1 receive data register is not empty

UART2_ITConfig(UART2_IT_RXNE_OR, ENABLE); //开uart2接收中断 需要了解UART2_Init();可以查看uart2.c中的原型函数 这样,UART2通信已经配置好了,接下来就是使用了。 发送函数如下:

void UART2_SendData8(u8 Data) { u8 i;

/* Transmit Data */ UART2->DR = Data;

while((UART2->SR &0x40)==0) ; //我修改的 UART2->SR &= ~(1<<6); //我修改的 }

在你需要发送数据的时候,直接调用UART2_SendData8(u8 Data)就可以了。在串口接收中断中调用读取数据函数:

u8 UART2_ReceiveData8(void) {

return ((u8)UART2->DR); }

也可以直接读取寄存器中的数据,

注意:在中断中读完数据后,退出中断前都需要先清中断标志位,调用函数如下: UART2_ClearITPendingBit(UART2_IT_LBDF);否则中断一直存在。

ADC转换配置:

ADC1和ADC2是10位的逐次比较型模拟数字转换器。提供多达16路多功能的输入通道(实际准确的通道数量在数据手册的引脚描述说明)。A/D转换的各通道可以执行单次和连续的转换模式。

相对与ADC2、ADC1具有一些扩展功能,包括扫描模式,带缓存的连续模式以及模拟看门狗。请参考数据手册来了解不同型号的ADC1和ADC2的功能信息。 ADC开—关控制

通过置位ADC_CR1寄存器的ADON位来开启ADC。当首次置位ADON位时,ADC从低功耗模式唤醒。为了启转换必须第二次使用写指令来置位ADC_CR1寄存器的ADON位。在转换结束时ADC会保持在上电状态,用户只需要置位ADON位来启动下次转换。如果长时间没有使用ADC,推荐ADC切换到低功耗模式来降低功耗,这可以通过清零ADON位来实现。

当ADC模块上电后,所选通道对应的I/O输出模块是被禁用的,因此推荐在ADC上电前要选适合的ADC转换通道。 ADC时钟

ADC的时钟是由Fmaster时钟经过预分频后提供的。时钟的预分频因子是由ADC_CR1寄存器的SPSEL[2:0]决定的。 数据对齐

ADC_CR2寄存器中的ALIGN位于选择转换后数据的对齐方式:

右对齐:8个低位数据被写入ADC_DL中,其余在ADC_DH中,读取时必须先读低位再读高位。 左对齐:8个高位数据被写入ADC_DH中,其余在ADC_DL中,读取时必须先读高位再读低位。 我利用ST公司提供的固件库实验如下: 初始化如下(单次转换): void Sys_ADC1_3_Int(void) {

/* Init GPIO for ADC1 */

GPIO_Init(GPIOB, (GPIO_PIN_0 |GPIO_PIN_1 |GPIO_PIN_2), GPIO_MODE_IN_FL_NO_IT); //初始化ADC 端口

CLK_PeripheralClockConfig(CLK_PERIPHERAL_ADC , ENABLE);

ADC1_DeInit();

// Init ADC2 peripheral

ADC1_Init(ADC1_CONVERSIONMODE_SINGLE, ADC1_CHANNEL_0, ADC1_PRESSEL_FCPU_D2, ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_CHANNEL0, DISABLE);

//ADC1_ITConfig( ADC1_IT_EOCIE,ENABLE); //Enable EOC interrupt 只有在使用ADC中断的时候才打开这一项

/*Start Conversion */

//ADC1_StartConversion();//启动ADC转换 }

这里ADC读取分使用中断方式和不使用两种 不使用中断,启动ADC后等待转换完毕:

ADC1_Init(ADC1_CONVERSIONMODE_SINGLE, ADC1_CHANNEL, ADC1_PRESSEL_FCPU_D2, ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_CHANNEL, DISABLE); //配置ADC通道及ADC转换模式 /*数据右对齐*/

ADC1_StartConversion();//启动ADC转换 /*Start Conversion */ while((ADC1->CSR & 0x80 ) != 0x80 ) ; //等待ADC转换完毕

Adc_Value = ADC1_GetConversionValue(); //读取ADC转换数据,先低位,后高位 中断方式: 在ADC中断函数中,直接读取ADC转换数据,

Adc_Value = ADC1_GetConversionValue(); //读取ADC转换数据,先低位,后高位 在主程序中隔一段时间选择ADC通道和启动ADC就可以了。

ADC1_Init(ADC1_CONVERSIONMODE_SINGLE, ADC1_CHANNEL_0, ADC1_PRESSEL_FCPU_D2, ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_CHANNEL0, DISABLE);

//ADC1_ITConfig( ADC1_IT_EOCIE,ENABLE); //Enable EOC interrupt 只有在使用ADC中断的时候才打开这一项

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库stm8学习笔记(2)在线全文阅读。

stm8学习笔记(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/1091231.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: