第十三届蓝桥杯省赛建模板笔记

目录

STM32CubeMx

1.配置时钟系统:

2.Key和Led配置:

3.LCD屏幕

4.Uart串口配置

5.I2c编写

6.ADC的配置

7.Tim文件

1)Tim6、Tim7标准定时器

2)PA15(Tim2-Ch1)  [R40] 作为输入捕获模式

3)PA6(Tim3_ch1)、PA7(Tim17_ch1)的pwm输出  频率一样,占空比可调

4)PA2(Tim15_ch1)输出方波是输出比较模式   同一个定时器,输出不同频率的波

 8.RTC配置


STM32CubeMx

选stm32G431RBT6

  1. 配置时钟系统:

    1. RCC: ”Crystal/Ceramic Resonator” 
    2. SYS:SysTick
    3. Clock Configuration :Input:24 ->HSE->/3  *20  /2  PLLCLK  80MHZ
  2. Key和Led配置:

    1. PA0,PB0,PB1,PB2,配置GPIO_Input;
    2. PC8-PC15,配置GPIO-Output,mode:High;
    3. LED PD2配置GPIO-Output
  3. LCD屏幕

    1. 添加lcd.c;lcd.h,font.h文件即可
    2. void Lcd_Proc(void)
      {
      	if((uwTick -  uwTick_Lcd)<100)	return;//减速函数
      		uwTick_Lcd = uwTick;
      	
      	//屏幕测试代码
      	sprintf((char *)Lcd_Str, "TEST CODE");
      	LCD_DisplayStringLine(Line9, Lcd_Str);	
      }
  4. Uart串口配置

    1. PA9:USART1_TX; PA10:USART1_RX
    2. USART1->Mode->Asynchonous 波特率:9600
    3. NVIC:Enable; 其余默认即可。
    4. 串口接收中断打开:
    5. 	//*串口接收中断打开
      	HAL_UART_Receive_IT(&huart1, (uint8_t *)(&rx_buffer), 1);
    6. 编写函数
    7. void Usart_Proc(void)
      {
      	if((uwTick -  uwTick_Usart)<1000)	return;//1s发一次
      	uwTick_Usart = uwTick;
      	
      //	sprintf(str, "%04d:Hello,world.\r\n", counter);
      //	HAL_UART_Transmit(&huart1,(unsigned char *)str, strlen(str), 50);
      //	
      //	if(++counter == 10000)
      //		counter = 0;
      }
      
      //串口接收中断回调函数
      void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
      {
      	
      //	counter++;
      	sprintf(str, "%04d:Hello,world.\r\n", counter);
      	HAL_UART_Transmit(&huart1,(unsigned char *)str, strlen(str), 50);	
      //	
      //	HAL_UART_Transmit(&huart1,(unsigned char *)(&counter),1, 50);		
      //	HAL_UART_Receive_IT(&huart1, (uint8_t *)(&rx_buffer), 1);
      
      }
  5. I2c编写

    1. 添加.c和.h文件。
    2. I2c_hal.c里的unsigned char I2CReceiveByte(void)应该是  
      • SCL_Output(0);
      • delay1(DELAY_TIME);
      • SDA_Output_Mode();
    3. 增加自己的代码:写和读的代码
      //24C02的相关代码
      void iic_24c02_write(uint8_t *pucBuf, uint8_t ucAddr, uint8_t ucNum)
      {
      	I2CStart();
      	I2CSendByte(0xa0);
      	I2CWaitAck();
      	
      	I2CSendByte(ucAddr);	
      	I2CWaitAck();	
      	while(ucNum--)
      	{
      		I2CSendByte(*pucBuf++);
      		I2CWaitAck();	
      	}
      	I2CStop();
      	delay1(500);	
      }
      
      
      void iic_24c02_read(uint8_t *pucBuf, uint8_t ucAddr, uint8_t ucNum)
      {
      	I2CStart();
      	I2CSendByte(0xa0);
      	I2CWaitAck();
      	
      	I2CSendByte(ucAddr);	
      	I2CWaitAck();
      	
      	I2CStart();
      	I2CSendByte(0xa1);
      	I2CWaitAck();	
      	while(ucNum--)
      	{
      		*pucBuf++ = I2CReceiveByte();
      		if(ucNum)
      			I2CSendAck();	
      		else
      			I2CSendNotAck();
      	}
      	I2CStop();	
      }
      
      //MCP4017的相关代码
      void write_resistor(uint8_t value)
      {
      	I2CStart();
      	I2CSendByte(0x5E);
      	I2CWaitAck();
      	
      	I2CSendByte(value);
      	I2CWaitAck();	
      	I2CStop();	
      }
      
      uint8_t read_resistor(void)
      {
      	uint8_t value;
      	I2CStart();
      	I2CSendByte(0x5F);
      	I2CWaitAck();
      	
      	value = I2CReceiveByte();
      	I2CSendNotAck();	
      	I2CStop();	
      	
      	return value;
      }
  6. ADC的配置

    1. IN11--> Single-ended;
    2. Clock Prescaler-->Asynchro...
    3. Rank-->640.5Cycles
    4. 手敲getADC的代码
    5. uint16_t getADC1(void)
      {
      	uint16_t adc = 0;
      	
      	HAL_ADC_Start(&hadc1);
      	adc = HAL_ADC_GetValue(&hadc1);
      	return adc;
      }
      
      
      uint16_t getADC2(void)
      {
      	uint16_t adc = 0;
      	
      	HAL_ADC_Start(&hadc2);
      	adc = HAL_ADC_GetValue(&hadc2);	
      	return adc;
      }
    6. 电压值:(float)getADC2())/4096)*3.3)
  7. Tim文件

    1. Tim6、Tim7标准定时器

      • Prescaler: 7999(80 0000/8000=10 000)
      • Counter Period: 999 (1 000 / 10 000=0.1s一次)
      • NVIC中断打开。
    2. PA15(Tim2-Ch1)  [R40] 作为输入捕获模式

      • Tim2_ch1:Reset mode(复位模式); 触发源:TI1FP1;内部时钟:Internal Clock
      • 两个通道:direct;indirect
      • 分频80;65535;Rising Edge;
      • Ch1;Ch2上升沿;下降沿
      • 需要NVIC中断的

         3.PA6(Tim3_ch1)、PA7(Tim17_ch1)的pwm输出  频率一样,占空比可调

          在使用pwm模式时,我们只要设置预分频系数PSC,自动重装载值ARR,就能确定PWM的具体频率,即PWM频率=(系统时钟频率)/(ARR+1)*(PSC+1)

  1. PWM Generation CH1
  2. PSC : 79;80 000 000/80 =1000 000
  3. Cubemx配置完成之后只需要启动定时器就可以完成pwm的输出。
  4. 不用中断
  5. Pulse:300 ; ->就是30%    600->60%
  6. ARR : 999;  1000次计数,频率就是1Khz
  7. Auto_reload:Enable
  8. Cubemx配置完成之后只需要启动定时器就可以完成pwm的输出。
  9. 启动定时器:HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1); //PA6

                4.PA2(Tim15_ch1)输出方波输出比较模式   同一个定时器,输出不同频率的波

  • Internal clock
  •  Ch1  输出比较模
  •  79;  65535;
  •  Auto_reload :关闭
  • Mode :Toggle
  • Pulse :100
  • 需要nvic中断

 8.RTC配置

  1. TIM ->RTC
  2. Activate Clock Sourse ; Activate Calendar
  3. Asynchronous 125
  4. Synchronous 6000  //125/6000=750 000
  5. BCD码就行
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值