Dear Pinsball,
Thank you very much for your response. I am using STM32F103VET6 running at 72MHz, and I indeed added some NOPS()
both between Clock high/low, and Latch high/low. Below is my piece of code, sorry I didn’t use macro definitions so it is kind of messy.
int main (void) {
Bsp_Init();
LL_APBx_EnableClock(GPIOD);
LL_APBx_EnableClock(GPIOE);
LL_GPIO_SetPinMode(GPIOC, LL_GPIO_PIN_6, LL_GPIO_MODE_OUTPUT);
LL_GPIO_SetPinSpeed(GPIOC, LL_GPIO_PIN_6, LL_GPIO_SPEED_FREQ_HIGH);
LL_GPIO_SetPinMode(GPIOD, LL_GPIO_PIN_0, LL_GPIO_MODE_OUTPUT);
LL_GPIO_SetPinMode(GPIOD, LL_GPIO_PIN_1, LL_GPIO_MODE_OUTPUT);
LL_GPIO_SetPinMode(GPIOD, LL_GPIO_PIN_2, LL_GPIO_MODE_OUTPUT);
LL_GPIO_SetPinMode(GPIOD, LL_GPIO_PIN_3, LL_GPIO_MODE_OUTPUT);
LL_GPIO_SetPinMode(GPIOD, LL_GPIO_PIN_4, LL_GPIO_MODE_OUTPUT);
LL_GPIO_SetPinMode(GPIOD, LL_GPIO_PIN_5, LL_GPIO_MODE_OUTPUT);
LL_GPIO_SetPinMode(GPIOD, LL_GPIO_PIN_6, LL_GPIO_MODE_OUTPUT);
LL_GPIO_SetPinSpeed(GPIOD, LL_GPIO_PIN_0, LL_GPIO_SPEED_FREQ_HIGH);
LL_GPIO_SetPinSpeed(GPIOD, LL_GPIO_PIN_1, LL_GPIO_SPEED_FREQ_HIGH);
LL_GPIO_SetPinSpeed(GPIOD, LL_GPIO_PIN_2, LL_GPIO_SPEED_FREQ_HIGH);
LL_GPIO_SetPinSpeed(GPIOD, LL_GPIO_PIN_3, LL_GPIO_SPEED_FREQ_HIGH);
LL_GPIO_SetPinSpeed(GPIOD, LL_GPIO_PIN_4, LL_GPIO_SPEED_FREQ_HIGH);
LL_GPIO_SetPinSpeed(GPIOD, LL_GPIO_PIN_5, LL_GPIO_SPEED_FREQ_HIGH);
LL_GPIO_SetPinSpeed(GPIOD, LL_GPIO_PIN_6, LL_GPIO_SPEED_FREQ_HIGH);
/*---------------------------*/
LL_GPIO_SetPinMode(GPIOE, LL_GPIO_PIN_0, LL_GPIO_MODE_OUTPUT);
LL_GPIO_SetPinMode(GPIOE, LL_GPIO_PIN_1, LL_GPIO_MODE_OUTPUT);
LL_GPIO_SetPinMode(GPIOE, LL_GPIO_PIN_2, LL_GPIO_MODE_OUTPUT);
LL_GPIO_SetPinMode(GPIOE, LL_GPIO_PIN_3, LL_GPIO_MODE_OUTPUT);
LL_GPIO_SetPinMode(GPIOE, LL_GPIO_PIN_4, LL_GPIO_MODE_OUTPUT);
LL_GPIO_SetPinMode(GPIOE, LL_GPIO_PIN_5, LL_GPIO_MODE_OUTPUT);
LL_GPIO_SetPinSpeed(GPIOE, LL_GPIO_PIN_0, LL_GPIO_SPEED_FREQ_HIGH);
LL_GPIO_SetPinSpeed(GPIOE, LL_GPIO_PIN_1, LL_GPIO_SPEED_FREQ_HIGH);
LL_GPIO_SetPinSpeed(GPIOE, LL_GPIO_PIN_2, LL_GPIO_SPEED_FREQ_HIGH);
LL_GPIO_SetPinSpeed(GPIOE, LL_GPIO_PIN_3, LL_GPIO_SPEED_FREQ_HIGH);
LL_GPIO_SetPinSpeed(GPIOE, LL_GPIO_PIN_4, LL_GPIO_SPEED_FREQ_HIGH);
LL_GPIO_SetPinSpeed(GPIOE, LL_GPIO_PIN_5, LL_GPIO_SPEED_FREQ_HIGH);
GPIOC->BSRR |= (1 << 6); /* OE-PIN Idle (High) */
GPIOE->BRR |= (1 << 5); /* Latch Data (Low) */
GPIOD->BRR |= (1 << 6); /* CK PIN (LOW) */
__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();
__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();
__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();
Bsp_LED_Off(BSP_LED0);
SysTick->LOAD = 71999U;
SysTick->CTRL |= SysTick_CTRL_TICKINT_Msk |
SysTick_CTRL_CLKSOURCE_Msk |
SysTick_CTRL_ENABLE_Msk;
GPIOC->BSRR = (1 << 6); /* OE-High Disable Output */
GPIOE->ODR &= (~(0x1F)); /* Select ROW 0 and ROW 15 */
GPIOE->ODR |= ((0x08));
//Shift_Data64_Out(0xFF);
//Shift_Data64_Out(0xFFFFFFFFFFFFFFFF); /* Shift Data Out */
//Shift_Data64_Out(0x5555555555555555); /* Shift Data Out */
Shift_Data64_Out(0x1111111111111111); /* Shift Data Out */
//Shift_Data64_Out(0x3F3F3F3F3F3F3F3F); /* Shift Data Out */
GPIOE->ODR |= (1 << 5); /* Latch Data - High Pulse */
__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();
__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();
GPIOE->ODR &= ~(1 << 5);
__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();
__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();
GPIOC->BRR = (1 << 6); /* Enable Output */
while (1) {
GPIOD->BRR = (1 << 6);
__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();
GPIOD->BSRR = (1 << 6);
__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();
}
}