<C-F> (Ctrl+letter) is always the same as mapping
<C-f> (Ctrl+Shift+letter). You can't map one without the other.
The root of the problem is that Vim reads characters from the terminal, which sends
^F (ASCII code
0x06) for both Ctrl+f and Ctrl+Shift+f; Vim has no way of knowing whether you pressed the Shift key. This post provides some more information about terminals & control characters.
In theory, this could be done with gVim, since most (or all?) graphic environments send much more detailed key events. But unfortunately, gVim operates much like a terminal emulator, and can't distinguish between
<C-F> either (this was perhaps a design decision for Vim-gVim compatibility).
You could configure your terminal emulator to send a different code to Vim when you press Ctrl+Shift+f. For example, for xterm you could do:
XTerm*VT100.translations: #override \n\
Ctrl ~Meta Shift <Key>f: string(0x1b) string("[24;6~")\n\
Ctrl ~Meta Shift <Key>r: string(0x1b) string("[23;6~")
This will send the code for
<C-S-F11> to Vim, which you can pick up with:
nnoremap <C-S-F12> :echo 'ctrl+F pressed!'<CR>
nnoremap <C-S-F11> :echo 'ctrl+R pressed!'<CR>
Note that you can map Alt+Shift+letter, since the terminal sends a different code for those:
NeoVim has, as far as I can find, not fixed this problem except for a few cases such as Ctrl+Shift+Enter and Ctrl+Shift+Tab, but it's possible that this feature will be added in the future.