创建本地网站,地图标注申请入口免费,wordpress网站的跳出率很低,合肥建设银行网站上一篇#xff1a;[嵌入式软件][启蒙篇][仿真平台] STM32F103实现LED、按键 文章目录 一、串口输出(1) 简介(2) 示例代码(3) 仿真效果 二、串口输入(1) 简介(2) 示例代码(3) 仿真效果 三、ADC采集(1) 简介(2) 示例代码#xff08;电压#xff09;(3) 仿真效果 #xff08;…上一篇[嵌入式软件][启蒙篇][仿真平台] STM32F103实现LED、按键 文章目录 一、串口输出(1) 简介(2) 示例代码(3) 仿真效果 二、串口输入(1) 简介(2) 示例代码(3) 仿真效果 三、ADC采集(1) 简介(2) 示例代码电压(3) 仿真效果 电压(4) 示例代码光敏(5) 仿真效果 光敏(6) 示例代码内部温度(7) 仿真效果 内部温度 一、串口输出
(1) 简介
学C语言时使用的printf()函数就是通过串口打印出来的。跟外部器件通信比如GPS模块、蓝牙模块、wifi模块两个开发板之间通信制定私有协议。PC电脑通信使用上位机显示数据或控制下位机。
(2) 示例代码
#include stdint.h
#include stdio.h
#include sys.h
#include stm32f10x_conf.h#include delay.h
#include led.h
#include key.h
#include usart.hint main() {// LED初始化LED_Init();// 按键初始化KEY_Init();//串口初始化uart_init(115200);// 由于LED接了VCC, 引脚高电平无法导通电路所以低电平点亮即VCC(火线)--GND(地线/零线)while(1) {if (Key_Scan(GPIOA, GPIO_Pin_1)) { // 检测按键整个过程。按下-松开LED !LED; // 每次按下切换开关。低电平点亮 高电平熄灭printf(key pressed. led state:%u\n, LED);}}
}(3) 仿真效果
操作打开串口–按下按键 二、串口输入
(1) 简介
跟外部器件通信比如GPS模块、蓝牙模块、wifi模块两个开发板之间通信制定私有协议。PC电脑通信使用上位机输入参数或控制下位机。
(2) 示例代码
#include stdint.h
#include stdio.h
#include string.h
#include sys.h
#include stm32f10x_conf.h#include delay.h
#include led.h
#include key.h
#include usart.hint main() {// LED初始化LED_Init();// 按键初始化KEY_Init();//串口初始化uart_init(115200);// 由于LED接了VCC, 引脚高电平无法导通电路所以低电平点亮即VCC(火线)--GND(地线/零线)while(1) {if (Key_Scan(GPIOA, GPIO_Pin_1)) { // 检测按键整个过程。按下-松开LED !LED; // 每次按下切换开关。低电平点亮 高电平熄灭printf(key pressed. led state:%u\n, LED);}if ((USART_RX_STA 0x8000) 0x8000) { // 接收完成printf(rx:%s\r\n, USART_RX_BUF); // 打印刚刚接收的数据USART_RX_STA 0; // 继续接收数据memset(USART_RX_BUF, 0, USART_REC_LEN); // 将刚刚接收到的数据清空}}
} 重点还有一个地方需要小修改(平台没有实现我们这里替换下就行)有兴趣可以研究下功能的实现 void USART1_IRQHandler(void) { //串口1中断服务程序uint16_t Res;// 接收中断(接收到的数据必须是0x0d 0x0a结尾, 就是换行符\r\n)if (USART_GetITStatus(USART1, USART_IT_RXNE) ! RESET) {Res USART_ReceiveData(USART1); //读取接收到的数据if ((USART_RX_STA 0x8000) 0) { //接收未完成if (USART_RX_STA 0x4000) { //接收到了0x0dif (Res ! 0x0a)USART_RX_STA 0; //接收错误,重新开始elseUSART_RX_STA | 0x8000; //接收完成了} else { //还没收到0X0Dif (Res 0x0d)USART_RX_STA | 0x4000;else {USART_RX_BUF[USART_RX_STA 0X3FFF] Res;USART_RX_STA;if (USART_RX_STA (USART_REC_LEN - 1))USART_RX_STA 0; //接收数据错误,重新开始接收}}}}
}(3) 仿真效果
操作打开串口–发送消息123456\r\n 三、ADC采集
这个实验需要添加电路如下图
将按钮移除 添加电压调节器
(1) 简介
ADC是一个专门采集模拟量转为为数字信号的外设。ADC一般采集电压、电流、光敏(光亮度)、温度、湿度、压力、声音等等。
(2) 示例代码电压
本实验使用STM32采样ADC模拟输入器的数据开启仿真后串口助手将ADC数值与转换出的电压值一并打印。
#include stdint.h
#include stdio.h
#include string.h
#include sys.h
#include stm32f10x_conf.h#include delay.h
#include led.h
#include adc.h
#include usart.huint32_t adc_value 0;
float voltage_value 0; //用于保存转换计算后的电压值int main() {// LED初始化LED_Init();// ADC1通道1初始化Adc_Init();//串口初始化uart_init(115200);while(1) {// 通过ADC_GetConversionValue函数查询ADC的DR寄存器获取ADC转换结果值adc_value Get_Adc(1);// 计算出模拟输入的电压值voltage_value(float)adc_value*(3.3/4095); // 打印ADC转换结果值printf(AD value is %d\n, adc_value);//打印计算出的电压值printf(voltage value is %f V\n, voltage_value);LED !LED;delay_ms(1000);}
}(3) 仿真效果 电压
操作 打开串口–调整电压
(4) 示例代码光敏
todo
(5) 仿真效果 光敏
todo
(6) 示例代码内部温度
todo
(7) 仿真效果 内部温度
todo