
#include"main.h" const uint32_t SEG_SegPins[]= { GPIO_PIN_0,GPIO_PIN_1,GPIO_PIN_2,GPIO_PIN_3,GPIO_PIN_4,GPIO_PIN_5,GPIO_PIN_6,GPIO_PIN_7, }; const uint32_t SEG_DigPins[]= { GPIO_PIN_8,GPIO_PIN_9,GPIO_PIN_10,GPIO_PIN_11, }; void Seg_Init(void); void Seg_DisplaySingleDigit(uint8_t n); void Seg_DynamicScan(uint8_t n1,uint8_t n2,uint8_t n3,uint8_t n4); int main(void) { uint32_t tsStart; uint32_t counter=0; uint8_t n1,n2,n3,n4; HAL_Init(); Seg_Init(); while(1) { tsStart=HAL_GetTick(); n1=(counter/1000)%10; n2=(counter/100)%10; n3=(counter/10)%10; n4=counter%10; while(HAL_GetTick()-tsStart >=1000) { Seg_DynamicScan(n1,n2,n3,n4); } counter++; } } void Seg_Init(void) { GPIO_InitTypeDef gpioinit; uint32_t i; //1.初始化数码管的段选引脚 gpioinit.Mode=GPIO_MODE_OUTPUT_PP; gpioinit.Speed=GPIO_SPEED_FREQ_LOW; __HAL_RCC_GPIOA_CLK_ENABLE(); for(i=0;i<8;i++) { gpioinit.Pin=SEG_SegPins[i]; HAL_GPIO_WritePin(GPIOA,SEG_SegPins[i],GPIO_PIN_RESET); HAL_GPIO_Init(GPIOA,&gpioinit); } //2.初始化数码管的位选引脚 gpioinit.Mode=GPIO_MODE_OUTPUT_PP; gpioinit.Speed=GPIO_SPEED_FREQ_LOW; __HAL_RCC_GPIOA_CLK_ENABLE(); for(i=0;i<4;i++) { gpioinit.Pin=SEG_DigPins[i]; HAL_GPIO_WritePin(GPIOA,SEG_DigPins[i],GPIO_PIN_SET); HAL_GPIO_Init(GPIOA,&gpioinit); } } void Seg_DisplaySingleDigit(uint8_t n) { const uint8_t font[]= { 0x3f,0x06,0x5B,0x4F,0x66,0x6D,0X7D,0X07,0X7F,0X6F }; uint32_t i; for(i=0;i<8;i++) { if((font[n] & (0x1 << i))!=0) { HAL_GPIO_WritePin(GPIOA,SEG_SegPins [i],GPIO_PIN_SET); } else { HAL_GPIO_WritePin(GPIOA,SEG_SegPins [i],GPIO_PIN_RESET); } } } void Seg_DynamicScan(uint8_t n1,uint8_t n2,uint8_t n3,uint8_t n4) { uint32_t i, j; uint8_t numbers[4]; numbers[0]=n1; numbers[1]=n2; numbers[2]=n3; numbers[3]=n4; for(i=0;i<4;i++) { for(j=0;j<4;j++) { HAL_GPIO_WritePin(GPIOA,SEG_DigPins[j],GPIO_PIN_SET); } Seg_DisplaySingleDigit(numbers[i]); HAL_GPIO_WritePin(GPIOA,SEG_DigPins[i],GPIO_PIN_RESET); HAL_Delay(10); } } |
如何鉴别芯片的进口版本和国产版本
cudeide执行run是烧录还是只是执行呢
cubeIDE在run后出现错误
F103RCT6芯片对AFIO->MAPR寄存器写入时出错
基于STM32F103的HAL库实现USB(HID) OTA升级
使用CubeMX选择芯片生成项目时如何选择外部晶振?
stm32f103c8t6 ADC channel 5采样被干扰导致程序卡死重启的可能性
Stm32f103 hal库如果设置多个外部中断,只要用螺丝刀碰触其中一个中断线,所有的中断函数都有可能进入,乱跳。同一个线路板用标准库就没问题。正点原子的开发版及HAL库例程也这样。STM32H562开发板及HAL库例程也这样。谁能答复一下
使用STM32F103控制两步进电机同时进行不同的运动(软件指令驱动),与控制一个电机的不同之处在于哪里?
怎么获取SMBus示例代码
共阴的,所有的比划都点亮了是正常的,A0-A7接的8个段选引脚。A8-A11接的4个位选引脚。
所有的比划都点亮了是正常的,A0-A7接的8个段选引脚。A8-A11接的4个位选引脚。共阴的。
延时那部分检查下。
能帮检查指导下吗?我检查了好几遍没有发现问题
{
tsStart=HAL_GetTick();
n1=(counter/1000)%10;
n2=(counter/100)%10;
n3=(counter/10)%10;
n4=counter%10;
while(HAL_GetTick()-tsStart >=1000)
{
Seg_DynamicScan(n1,n2,n3,n4);
}
counter++;
}
红色部分能执行??????
先获取滴答定时器当前的时间是多少多少毫秒减去一刚开头记时的时间,如果这两个时间的差值大于1000的话。也就表示我刚开始计时到本次的时候,时间已经过去了1s。然后等完一秒后,我的counter自动加1。while循环里面就是用来做的刷新。