[其他ST产品] newlab平台stm32总结

[复制链接]
1995|59
 楼主| 纠结的那些年 发表于 2023-8-26 18:05 | 显示全部楼层
用途
温度光照传感器
使用的是 temp_light.c temp_light.h源文件
实验步骤:
1.初始化温度光照
2.使用GetTemp函数获取温度
3.使用GetLight函数获取光照
接线:
温度输出口:PC0
光照输出口:PC1
 楼主| 纠结的那些年 发表于 2023-8-26 18:05 | 显示全部楼层
  1. uint8_t GetTemp(){
  2.         uint16_t temp;
  3.         temp=GetADC_Time(TEMP_CH,10);
  4.         printf("temp adc value:%d\r\n",temp);
  5.         return calculateTemperature(calculateResValue(temp));
  6. }

  7. /***************************************************************
  8.   *        @brief        获取一次光照值,以百分比的形式计算
  9.   *        @param       
  10.   *        @retval        float 光照值
  11. ****************************************************************/
  12. //
  13. float GetLight(){
  14.         uint16_t        light;
  15.         light=GetADC_Time(LIGHT_CH,10);
  16.         printf("light adc value:%d\r\n",light);
  17.         return 100-((float)light*1000/4096)*100/1000;
  18. }

 楼主| 纠结的那些年 发表于 2023-8-26 18:05 | 显示全部楼层
  1. #include "usart1.h"
  2. #include "delay.h"
  3. #include <stdio.h>
  4. #include "temp_light.h"

  5. int main(){
  6.         Byte temp[20];
  7.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  8.         Usart1_Init(115200);
  9.         delay_init();
  10.         TEMP_LIGHT_Init();
  11.         printf("runnning...\r\n");
  12.         while(1){
  13.                 printf("temp:%d\r\n",GetTemp());
  14.                 printf("light:%d\r\n",GetLight());
  15.                 delay_ms(1000);
  16.         }
  17. }
 楼主| 纠结的那些年 发表于 2023-8-26 18:05 | 显示全部楼层
五、DAC输出
步骤:
1.设置系统时钟
2.初始化DAC
3.DAC_OutVoltage(float Voltage)设置引脚输出电压值
 楼主| 纠结的那些年 发表于 2023-8-26 18:06 | 显示全部楼层
接线:
DAC输出口
DAC_OUT1–PA4
DAC_OUT2–PA5
 楼主| 纠结的那些年 发表于 2023-8-26 18:06 | 显示全部楼层
void DAC_Configuration(void)
{
  
        GPIO_InitTypeDef GPIO_InitStructure;
        DAC_InitTypeDef DAC_InitType;
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE );          //使能PORTA通道时钟
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE );          //使能DAC通道时钟

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;                                 // 端口配置
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;                  //模拟输入(STM32没有模拟输出模式,这里只好配置为模拟输入)
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
                                       
        DAC_InitType.DAC_Trigger=DAC_Trigger_None;        //不使用触发功能 TEN1=0
        DAC_InitType.DAC_WaveGeneration=DAC_WaveGeneration_None;//不使用波形发生
        DAC_InitType.DAC_LFSRUnmask_TriangleAmplitude=DAC_LFSRUnmask_Bit0;//屏蔽、幅值设置
        DAC_InitType.DAC_OutputBuffer=DAC_OutputBuffer_Disable ;        //DAC1输出缓存关闭 BOFF1=1
  DAC_Init(DAC_Channel_1,&DAC_InitType);         //初始化DAC通道1

        DAC_Cmd(DAC_Channel_1, ENABLE);  //使能DAC1
  
  DAC_SetChannel1Data(DAC_Align_12b_R, 0);  //12位右对齐数据格式设置DAC值,默认输出0V

}
void DAC2_Configuration(void)
{
  
        GPIO_InitTypeDef GPIO_InitStructure;
        DAC_InitTypeDef DAC_InitType;
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE );          //使能PORTA通道时钟
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE );          //使能DAC通道时钟

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;                                 // 端口配置
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;                  //模拟输入(STM32没有模拟输出模式,这里只好配置为模拟输入)
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
                                       
        DAC_InitType.DAC_Trigger=DAC_Trigger_None;        //不使用触发功能 TEN1=0
        DAC_InitType.DAC_WaveGeneration=DAC_WaveGeneration_None;//不使用波形发生
        DAC_InitType.DAC_LFSRUnmask_TriangleAmplitude=DAC_LFSRUnmask_Bit0;//屏蔽、幅值设置
        DAC_InitType.DAC_OutputBuffer=DAC_OutputBuffer_Disable ;        //DAC1输出缓存关闭 BOFF1=1
  DAC_Init(DAC_Channel_2,&DAC_InitType);         //初始化DAC通道2

        DAC_Cmd(DAC_Channel_2, ENABLE);  //使能DAC2
  
  DAC_SetChannel2Data(DAC_Align_12b_R, 0);  //12位右对齐数据格式设置DAC值,默认输出0V

}

//设置通道1输出电压
// Voltage----电压值,取值范围为0~3.3V
void DAC1_OutVoltage(float Voltage)
{
        uint16_t data;
        data=(uint16_t)(Voltage*4095/3.3);//换算为12位整数值
        DAC_SetChannel1Data(DAC_Align_12b_R,data);//12位右对齐数据格式设置DAC值
        DAC_SoftwareTriggerCmd(DAC_Channel_1,ENABLE); //启动转换
}

void DAC2_OutVoltage(float Voltage)
{
        uint16_t data;
        data=(uint16_t)(Voltage*4095/3.3);//换算为12位整数值
        DAC_SetChannel2Data(DAC_Align_12b_R,data);//12位右对齐数据格式设置DAC值
        DAC_SoftwareTriggerCmd(DAC_Channel_2,ENABLE); //启动转换
}
 楼主| 纠结的那些年 发表于 2023-8-26 18:06 | 显示全部楼层
  1. #include "stm32f10x.h" //STM32
  2. #include "sys.h"
  3. #include "delay.h"
  4. #include "usart.h"

  5. #include "dac.h"


  6. int main (void){
  7.         float voltage=2;
  8.         delay_ms(500); //
  9.         RCC_Configuration(); // 系统时钟初始化
  10.         DAC_Configuration(); //DAC初始化设置
  11.         USART1_Init(115200);
  12.         DAC1_OutVoltage(voltage);
  13.         while(1){
  14.                 while(1)
  15.         {
  16.                
  17.                 delay_ms(1000);
  18.                
  19.                 if (voltage<3.3)
  20.                 {voltage+=0.1;}
  21.                 else
  22.                 {voltage=0;}
  23.                 //voltage=3.3;
  24.                 DAC1_OutVoltage(voltage);
  25.                 while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);
  26.                 printf("DAC输入的数字为:%d",(uint16_t)(voltage*4095/3.3));
  27.                 printf("DAC输出电压为:%.3f\n",voltage);
  28.         }
  29.         }
  30. }
 楼主| 纠结的那些年 发表于 2023-8-26 18:06 | 显示全部楼层
比赛总结:
熟悉stm32各个引脚的初始化,会各个模块的各种逻辑使用
houcs 发表于 2023-8-26 23:12 | 显示全部楼层
可使用PCTOLCD生成需要的点阵
Wordsworth 发表于 2024-9-11 07:29 | 显示全部楼层

模块电源选购灌封材料的时候,需要注意导热系数要能达到电子部件散热的需求,不过粘接能力不太强
Clyde011 发表于 2024-9-11 08:32 | 显示全部楼层

A、B组分先分别用手动或机械进行充分搅拌,让A、B灌封料充分融合
公羊子丹 发表于 2024-9-11 09:25 | 显示全部楼层

可能击穿开关器件,
万图 发表于 2024-9-11 10:28 | 显示全部楼层

如果想要让它正常工作且不会损坏
Uriah 发表于 2024-9-11 11:31 | 显示全部楼层

前模块电源灌封时用的最多的是加成型有机灌封硅胶
帛灿灿 发表于 2024-9-11 13:27 | 显示全部楼层

电阻属于一个普通的元件
Bblythe 发表于 2024-9-11 14:30 | 显示全部楼层

并且考虑到TVS相同的尺寸
周半梅 发表于 2024-9-11 16:26 | 显示全部楼层

当异常过压消失,恢复至高阻态
Pulitzer 发表于 2024-9-11 17:29 | 显示全部楼层

微控制器、数字信号控制器和处理器都具有内部的ESD钳位二极管
童雨竹 发表于 2024-9-11 19:25 | 显示全部楼层

ESD电压一般超过导通电压
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部